未定义的方法 'mechanism=' for ActiveSupport::D ependencies:Module (NoMethodError)



在rails 7.0.0 中生成控制器时遇到问题

当我运行命令时

rails g controller Home index

它给了我以下错误。

/home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application.rb:103:in `block in preload': undefined method `mechanism=' for ActiveSupport::Dependencies:Module (NoMethodError)
from /home/dev/.rvm/gems/ruby-3.0.2/gems/railties-7.0.1/lib/rails/initializable.rb:32:in `instance_exec'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/railties-7.0.1/lib/rails/initializable.rb:32:in `run'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/railties-7.0.1/lib/rails/initializable.rb:61:in `block in run_initializers'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:228:in `block in tsort_each'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:431:in `each_strongly_connected_component_from'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:349:in `block in each_strongly_connected_component'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:347:in `each'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:347:in `call'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:347:in `each_strongly_connected_component'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:226:in `tsort_each'
from /home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/tsort.rb:205:in `tsort_each'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/railties-7.0.1/lib/rails/initializable.rb:60:in `run_initializers'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/railties-7.0.1/lib/rails/application.rb:372:in `initialize!'
from /home/dev/project/spousal/config/environment.rb:5:in `<main>'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/bootsnap-1.10.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/bootsnap-1.10.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/zeitwerk-2.5.3/lib/zeitwerk/kernel.rb:35:in `require'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application.rb:106:in `preload'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application.rb:157:in `serve'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application.rb:145:in `block in run'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application.rb:139:in `loop'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application.rb:139:in `run'
from /home/dev/.rvm/gems/ruby-3.0.2/gems/spring-2.1.1/lib/spring/application/boot.rb:19:in `<top (required)>'
from <internal:/home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/home/dev/.rvm/rubies/ruby-3.0.2/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from -e:1:in `<main>

我在谷歌上搜索了一下,但没有找到解决方案。那么这个错误的原因是什么呢?

我最近将an升级到Rails 7.0.1,遇到了同样的问题。我在尝试运行rails console时看到了同样的错误。

当我从Gemfile中删除spring-watcher-listen时(因为它阻止了spring更新超过的2.x(,然后在Gemfile中将spring提升到3.0.0时,我就克服了它。然后我运行了bundlerails console再次工作。

这似乎是我们在升级Rails时必须克服的一个障碍,正如本文在";6.显著变化";。

此处相同,在rails g migration ..上。在更新到rails-7.0.4。尽管我在我的gemfile中有gem "spring"并运行bundle update,spring在2.x.上运行。将它在gemfile中更改为gem 'spring', '~> 4.1'runbundle,它就工作了。

在我的案例中,问题是这个宝石:gem 'spring-watcher-listen', '~> 2.0.0'

我也在使用它,从Gemfile中删除它后,我可以使用bundle update spring,所以rails c又恢复了工作。

在将rails 6应用程序更新为rails 7后,面临此问题。我尝试执行rails g model User命令。

我通过直接用rails 7重新创建项目来解决这个问题。

如果您有一个已升级到rails 7的现有项目,则无法应用此解决方案。更好地参考官方转换轨道指南

最新更新