Ошибка при попытке установить devise в Ruby on Rails 7.0.0

#ruby-on-rails #ruby #devise #rubygems

Вопрос:

Я пытаюсь установить devise в версии rails, я получаю ошибку последней версии devise

Я пробовал использовать другие версии разработки, но это обновление до последней версии,

в этом и заключается ошибка:

 /usr/local/bundle/gems/devise-4.8.0/lib/devise.rb:321:in `ref': undefined method `reference' for ActiveSupport::Dependencies:Module (NoMethodError)
web_1  |    from /usr/local/bundle/gems/devise-4.8.0/lib/devise.rb:340:in `mailer='
web_1  |    from /usr/local/bundle/gems/devise-4.8.0/lib/devise.rb:342:in `<module:Devise>'
web_1  |    from /usr/local/bundle/gems/devise-4.8.0/lib/devise.rb:11:in `<main>'
web_1  |    from /usr/local/bundle/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
web_1  |    from /usr/local/bundle/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
web_1  |    from /usr/local/bundle/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
web_1  |    from /usr/local/bundle/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
web_1  |    from /usr/local/bundle/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
web_1  |    from /usr/local/bundle/gems/zeitwerk-2.5.0.beta3/lib/zeitwerk/kernel.rb:35:in `require'
web_1  |    from /usr/local/lib/ruby/3.0.0/bundler/runtime.rb:66:in `block (2 levels) in require'
web_1  |    from /usr/local/lib/ruby/3.0.0/bundler/runtime.rb:61:in `each'
web_1  |    from /usr/local/lib/ruby/3.0.0/bundler/runtime.rb:61:in `block in require'
web_1  |    from /usr/local/lib/ruby/3.0.0/bundler/runtime.rb:50:in `each'
web_1  |    from /usr/local/lib/ruby/3.0.0/bundler/runtime.rb:50:in `require'
web_1  |    from /usr/local/lib/ruby/3.0.0/bundler.rb:174:in `require'
 

если бы вы могли мне помочь, я был бы благодарен

Комментарии:

1. Rails 7 все еще является предварительной версией (текущая версия версии 6.1.4) многие драгоценные камни (особенно те, которые в значительной степени зависят от внутренних компонентов rails, таких как devise), могут работать неправильно. Эти проблемы, скорее всего, будут решены к моменту фактического выпуска rails 7 или вскоре после этого.

Ответ №1:

Источник ошибки

Версия разработки, которую вы используете, вызывает метод с именем reference . https://github.com/heartcombo/devise/blob/c82e4cf47b02002b2fd7ca31d441cf1043fc634c/lib/devise.rb#L320-L323

 def self.ref(arg)
  ActiveSupport::Dependencies.reference(arg)
  Getter.new(arg)
end
 

Этот метод существовал в Rails 6:
https://github.com/rails/rails/blob/6-0-stable/activesupport/lib/active_support/dependencies.rb#L651-L653

Он был удален в рельсах 7: https://github.com/rails/rails/blob/main/activesupport/lib/active_support/dependencies.rb

Эта строка из журнала изменений Rails 7.0.0.alpha1 объясняет.

Частные внутренние классы ActiveSupport::Зависимости были удалены, такие как ActiveSupport::Зависимости::Ссылка, ActiveSupport::Зависимости::Виновные и другие.

https://github.com/rails/rails/blob/main/activesupport/CHANGELOG.md#rails-700alpha1-september-15-2021

Исправление: Разработка обновления

Устройство выпустило версию 4.8.1, совместимую с Rails 7. Запустите bundle update devise для обновления.

Комментарии:

1. Я нашел обходной путь, который я только что опубликовал, но да, это была бы еще одна альтернатива в rails 7, которую они еще не исправили. Большое вам спасибо за ваше время и ответ: D

Ответ №2:

Разработчики уже объединили исправление этой проблемы с rails 7 в их основную ветвь.

До тех пор, пока не будет выпущена новая версия, вы можете указать драгоценный камень разработки, чтобы использовать основную ветвь с GitHub в своем файле Gemfile:

 gem 'devise', git: 'https://github.com/heartcombo/devise', branch: 'main'

 

Ответ №3:

Это исправление исправило мою ошибку:

драгоценный камень «разработка», github: «стробиломицеты/разработка», ветвь: «патч-1»

https://github.com/heartcombo/devise/pull/5397

Комментарии:

1. Рад, что вы нашли решение. Имейте в виду, что это развилка разработки; вы не получите никаких будущих обновлений из этой библиотеки, если strobilomyces не обновит эту ветвь.