尝试在 Ruby on Rails 7.0.0 中安装设备时出错

Sam*_*sta 12 ruby rubygems ruby-on-rails devise

我正在尝试在 Rails 版本中安装 devise,但出现最新版本 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'
Run Code Online (Sandbox Code Playgroud)

如果你能帮助我,我将不胜感激

Jak*_*rth 24

错误来源

您使用的 Devise 版本调用名为 的方法referencehttps://github.com/heartcombo/devise/blob/c82e4cf47b02002b2fd7ca31d441cf1043fc634c/lib/devise.rb#L320-L323

def self.ref(arg)
  ActiveSupport::Dependencies.reference(arg)
  Getter.new(arg)
end
Run Code Online (Sandbox Code Playgroud)

Rails 6中存在该方法: https ://github.com/rails/rails/blob/6-0-stable/activesupport/lib/active_support/dependency.rb#L651-L653

它已在 Rails 7 中删除: https ://github.com/rails/rails/blob/main/activesupport/lib/active_support/dependency.rb

Rails 7.0.0.alpha1 变更日志中的这一行对此进行了解释。

ActiveSupport::Dependency 的私有内部类已被删除,例如 ActiveSupport::Dependencies::Reference、ActiveSupport::Dependency::Blamable 等。

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

修复:升级设备

Devise 已经发布了兼容 Rails 7 的4.8.1bundle update devise版本。运行即可升级。