Подтвердить что ты не робот

Undefined метод `write_inheritable_attribute 'для Rails:: Generator:: Base: Class (NoMethodError)

Я работаю над рельсами, сервер неожиданно перестает работать. Он отлично работает, и я использовал следующую команду [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]
4b9b3361

Ответ 1

У меня была та же проблема, но это было результатом наличия gem rmagick.

Я запустил следующее:

gem uninstall rmagick 
gem cleanup 

И затем повторно запустил bundle в моем стеке, и он снова работал у меня.

Ответ 2

Я решил эту проблему. Используйте следующую команду и проблему.

 gem install rails

Это установит обновленные рельсы, и все, что работает, снова найдет.

Ответ 3

Запуск bundle exec rails s работал у меня.

Мой проект использовал Rails 3.x, но когда я запустил rails -v, я получил 2.3.17, который является версией, используемой проектом, над которым я работал раньше. Как-то установка этой версии должна быть установлена ​​как "по умолчанию".

Может ли кто-нибудь объяснить это?

Ответ 4

если вы используете последнюю версию рельсов 3 или рельсов 4, используйте class_attributes вместо write_inheritable_attribute, т.е.

class_attribute :variable_name
self.variable_name = value

вместо

write_inheritable_attribute(:variable_name, value)

Ответ 5

У меня была эта проблема, и случилось так, что я использовал неправильный рубин и gemset в rvm.

Ответ 6

(@jeremy-f и @alex-villa находятся на правильном пути для идентификации самой проблемы.)

Проблема в том, что команда rails ... в Rails версии 2 является генератором, эквивалентным rails new ... в Rails 3+. Таким образом, rails s является командой Rails 2 для создания нового приложения Rails 2 с именем "s" (тогда как большинство из нас, когда мы пишем rails s, намереваемся использовать Rails 3, то есть запускаем сервер!)

Если вы установите драгоценный камень, он обычно будет устанавливать свой двоичный путь в пути, поэтому вы должны будете вызвать эту ошибку, выполнив gem install rails -v 2.3.15, затем rails s, как говорит OP.

Три способа исправить:

  • gem install rails для установки более новой версии Rails (вам может потребоваться указать версию >= 3.0)
  • Запустите приложение с помощью bundle exec rails s (только если у вас есть Rails 3 в Gemfile)
  • Обычный способ запуска проекта Rails 2 - это просто script/server