Невозможно выполнить какие-либо команды в моем приложении heroku (мигрировать, консоль и т. Д.)

Я бегу рельсы 4.0.4 с ruby ​​2.1.1. расположение приложения: https://github.com/ravjohal/dozmia

Когда я пытаюсь запустить команды на героку, например:

ravjohal$ heroku run rake db:migrate

Я получаю следующую ошибку:

Running `rake db:migrate` attached to terminal... up, run.2545
rake aborted!
NoMethodError: undefined method `dump_schema_after_migration=' for ActiveRecord::Base:Class
/app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.0.4/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.0.4/lib/active_record/railtie.rb:166:in `block (3 levels) in <class:Railtie>'...../app/config/environment.rb:5:in `<top (required)>'....

вот часть логов героки:

/app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.0.4/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `dump_schema_after_migration=' for #<Class:0x007fa6e13d76d0> (NoMethodError)
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/lazy_load_hooks.rb:44:in `run_load_hooks'
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/lazy_load_hooks.rb:45:in `block in run_load_hooks'
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/lazy_load_hooks.rb:44:in `each'
2014-03-27T18:30:55.730401+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.0.4/lib/rails/engine.rb:464:in `each'
2014-03-27T18:30:55.730191+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.0.4/lib/rails/engine.rb:465:in `block (2 levels) in eager_load!'
2014-03-27T18:30:55.730191+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/dependencies.rb:229:in `require'
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/lazy_load_hooks.rb:38:in `instance_eval'
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.0.4/lib/active_record/railtie.rb:165:in `block (2 levels) in <class:Railtie>'
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/lazy_load_hooks.rb:38:in `execute_hook'
2014-03-27T18:30:55.729964+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.0.4/lib/active_record/railtie.rb:165:in `each'
2014-03-27T18:30:55.730191+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.0.4/lib/active_support/dependencies.rb:229:in `b
lock in require'
2014-03-27T18:30:55.730191+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/activerecord-4.0.4/lib/active_record/base.rb:22:in `<top (required)>'
2014-03-27T18:30:55.730191+00:00 app[web.1]:    from /app/app/models/playlist.rb:1:in `<top (required)>'

Я развернул свое приложение, используя 4.1.0rc1 Rails (работал нормально), а затем изменил Gemfile, чтобы вместо него использовать 4.0.4. Я также изменил свою локальную базу данных разработки на pg вместо sqllite3. Это единственные два изменения, которые я сделал, и только после этих изменений проблема появилась на герою. Приложение прекрасно работает на localhost.

РЕДАКТИРОВАТЬ: Я также хочу добавить, что я изменил имя приложения локально (хотя не уверен, что это будет иметь значение).

3 ответа

Решение

Конфиг dump_schema_after_migration не существовало в Rails 4.0.4.

Вы получили ошибку, потому что изначально развернули с Rails v4.1.0rc1 и позже переключились на v4.0.4. Что на самом деле произошло, так это то, что когда вы сгенерировали ваше приложение с помощью rails 4.1.0rc, генератор поместил конфигурацию dump_schema_after_migration в ваш config/environments/production.rb и код Rails 4.1.0rc1 имеет это для поддержки этой конфигурации:

mattr_accessor :dump_schema_after_migration

Следовательно все отлично работает в v4.1.0rc1. Но когда вы вернулись к v4.0.4, конфиг все еще там config/environments/production.rb, но код Rails больше не знает, как читать этот конфиг. Чтобы решить эту проблему, используйте код Rails 4.1.0rc1 или удалите конфигурацию из config/environments/production.rb при работе на Rails 4.0.4.

Кстати, я добавил dump_schema_after_migration Конфиг для кода Rails.

Поэтому, попробовав много вещей и ударив себя по голове, чтобы НЕ пытаться что-то очевидное... я удалил следующую строку из файла environment /production.rb:

config.active_record.dump_schema_after_migration = false

После этого он отлично работал на герою.

У меня нет ответа, но причина, по которой проблема будет происходить

При использовании бета-версии продукта (Rails) вы получите много новых (относительно непроверенных) функциональных возможностей. Это будет работать, но может вызвать проблемы с более ранними версиями программного обеспечения, так как новое обычно означает больше функциональности и т. Д.

Если вы начинаете с Rails, я бы порекомендовал удалить гем Rails 4.1.0 из вашей системы: gem uninstall rails, а затем снова установить Rails 4.0.4 - gem install rails

Это будет проблемой с Rails 4.1.0, но мне нужно немного поэкспериментировать

Другие вопросы по тегам