#はじめに
Rails6のAPIモードでdevise_token_authを使用してログイン機能をもつアプリを作ってみようと思ったところ、bundle install
でエラーを吐いた。
#エラー内容
Bundler could not find compatible versions for gem "rails":
In snapshot (Gemfile.lock):
rails (= 6.1.1)
In Gemfile:
rails (~> 6.1.1) x86_64-darwin-20
devise_token_auth x86_64-darwin-20 was resolved to 0.1.21.alpha2, which
depends on
rails (~> 4.1.4)
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
エラー文を読む感じrailsとdevise_token_authの依存関係が上手くいってないらしい。
調べたところ、devise_token_authはrails6.1より大きいとダメらしい。
参考:https://stackoverflow.com/questions/65865321/cant-install-devise-token-auth
That seemed to do it. Seems like devise_token_auth v1.1.4 needs rails >= 4.2.0, < 6.1, so I just specified gem 'rails', '6.0'.
#対処法
今回はRails6を使用できれば何でも良かったので、Railsのバージョンを6.0にすることで対応。
gem 'rails', '~> 6.0'
Gemfileのrailsを上記のように6.0に修正してbundle update rails
をすると依存関係の問題がなくなりインストールできる。
#追記
依存関係の問題がなくなったので、rails g devise:install
しようとしたらまたエラーがでた。
cinfig/application.rb内に6.1を指定している箇所があるらしいのでそこを修正。
class Application < Rails::Application
config.load_defaults 6.0
config.api_only = true
end
修正後にrails g devise:install
したら無事にインストールが完了した。
#追記2
rails s
でサーバーを立ち上げようとしたところまたエラーを吐いた。
config.ru:6:in `block in <main>': undefined method `load_server' for #<アプリ名::Application:0x00007f953935ef00> (NoMethodError)
Did you mean? load_seed
エラーを読むとload_serverというメソッドが存在しないと言われてるらしい。load_serverで調べたら6.1から6.0にダウングレードする場合はconfig.ruのload_serverは削除しないといけないらしい。
# This file is used by Rack-based servers to start the application.
require_relative "config/environment"
run Rails.application
+ Rails.application
# 削除
- Rails.application.load_server
config.ruを修正したところ無事にサーバーを起動できた。