用于Rails :: Generator :: Base的未定义方法`write_inheritable_attribute':Class(NoMethodError)

时间:2012-06-18 07:44:15

标签: ruby-on-rails-3

我正在使用rails,突然rails服务器停止工作。它工作正常,我使用了以下命令[platform windows 7]

gem install -v=2.3.5 rails

当我使用rails s时,它会出现以下错误:

c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/lib/rails_generator/options.rb:32:in `default_options': undefined method `write_inheritable_attribute' for Rails::Generator::Base:Class (NoMethodError)
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/lib/rails_generator/base.rb:90:in `<class:Base>'
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/lib/rails_generator/base.rb:85:in `<module:Generator>'
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/lib/rails_generator/base.rb:48:in `<module:Rails>'
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/lib/rails_generator/base.rb:6:in `<top (required)>'
    from c:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
    from c:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/lib/rails_generator.rb:34:in `<top (required)>'
    from c:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
    from c:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.5/bin/rails:14:in `<top (required)>'
    from c:/Ruby193/bin/rails:23:in `load'
    from c:/Ruby193/bin/rails:23:in `<main>'

$ rails -v
Rails 2.3.5
$ ruby -v
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

6 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,但这是gem rmagick

的结果

我运行了以下内容:

gem uninstall rmagick 
gem cleanup 

然后在我的堆栈中重新运行bundle,它再次为我工作。

答案 1 :(得分:8)

我已经解决了这个问题。使用以下命令和问题

 gem install rails

这将安装更新的rails并重新找到所有工作。

答案 2 :(得分:7)

正在运行bundle exec rails s为我工作。

我的项目使用的是Rails 3.x但是当我运行rails -v时,我得到了2.3.17,这是我之前工作过的项目使用的版本。以某种方式安装此版本必须设置为“默认”。

有人可以解释一下吗?

答案 3 :(得分:3)

如果您使用的是最新版本的rails 3或rails 4,请使用class_attributes代替write_inheritable_attribute,即

class_attribute :variable_name
self.variable_name = value

而不是

write_inheritable_attribute(:variable_name, value)

答案 4 :(得分:1)

我遇到了这个问题,碰巧我在rvm中使用了错误的ruby和gemset。

答案 5 :(得分:1)

(@ jeremy-f和@ alex-villa正确定了问题本身。)

这里的问题是Rails版本2中的rails ...命令是一个生成器,相当于Rails 3+中的rails new ...。所以rails s是一个Rails 2命令,用于生成一个名为&#34; s&#34;的新Rails 2应用程序。 (而我们大多数人在编写rails s时都打算使用Rails 3,即启动服务器!)

如果你安装了一个gem,它通常会在路径中安装它的二进制文件,所以你应该能够像OP所说的那样gem install rails -v 2.3.15然后rails s来导致这个错误。

解决问题的三种方法:

  • gem install rails安装较新版本的Rails(您可能需要指定版本&gt; = 3.0)
  • 使用bundle exec rails s运行应用程序(仅当您的Gemfile中有Rails 3时)
  • 运行Rails 2项目的常用方法是script/server