Рейк отменен! Неинициализированная константа Rake :: DSL на Heroku - PullRequest
6 голосов
/ 18 июля 2011

При попытке rake db:migrate на Heroku . Я получаю следующую ошибку.

rake aborted!
uninitialized constant Rake::DSL

Из того, что я понял, похоже, ошибка с Rake 0.9.2. Если я делаю «список драгоценных камней» локально, то, по-видимому, устанавливается только Rake (0.8.7).

Я попытался добавить "gem 'rake', '0.8.7'" в мой файл gem и запустить установку пакета, но затем я получил следующую ошибку.

You have requested:
rake = 0.8.7

The bundle currently has rake locked at 0.9.2.
Try running `bundle update rake`

Если я выполняю , запускаю bundle update rake, он возвращается к 0.9.2, и я возвращаюсь к тому, с чего начал.

Я что-то упускаю здесь очевидное?

Ответы [ 5 ]

10 голосов
/ 18 июля 2011

Вы должны запускать команды с bundle exec, чтобы убедиться, что вы получаете правильные зависимости. Итак, бегите:

bundle exec rake db:migrate

Более подробное сообщение смотрите в блоге Yehuda Katz http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

Если у вас все еще остаются проблемы, похоже, есть еще несколько человек с такой же проблемой Как исправить проблему неинициализированной константы Rake :: DSL в Heroku? , которую они решили, добавив следующее к своим Rakefile:

require 'rake/dsl_definition'
require 'rake'
3 голосов
/ 26 июля 2011

Я получил эту ошибку при выполнении "heroku rake db: migrate".

In /app:

rake aborted!
uninitialized constant Rake::DSL
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
....
...
....
..
etc...

Я исправил ее, добавив

require 'rake/dsl_definition' 

в RakeFile, а затем набрал

bundle update rake
git add .
git commit -m "Change RakeFile"
git push heroku
heroku rake db:migrate

Этот решил мою проблему.Я не добавил gem 'rake', '0.8.7' в свой файл драгоценных камней, и мой список драгоценных камней показывает рейк (0.9.2, 0.8.7).

1 голос
/ 18 июля 2011

У меня есть запись в блоге об этом, Вы уже активировали Rake 0.9.2 . Есть два способа сделать это:

Используйте только старую версию Rake:

Проверьте свои текущие версии Rake с $ gem list. Посмотрите, какие версии Rake у вас есть, и удалите их все, кроме 0.8.7. Вы можете удалить драгоценные камни с помощью gem uninstall rake -v=0.9.1 или любой другой версии, которую вам нужно удалить.

Или просто добавьте один лайнер в ваш файл Rake:

Если вам не нужно использовать более старую версию Rake, проще добавить эту строку require 'rake/dsl_definition' в приложение Rakefile вашего Rails.

require File.expand_path('../config/application', __FILE__)
require 'rake/dsl_definition'
require 'rake'
0 голосов
/ 24 июля 2011

Как и в случае ответа Рича (решение этой проблемы без удаления каких-либо драгоценных камней), но с исправлением вашего шага 1. и несколькими дополнительными шагами:

  1. В файле gem укажите:

    gem 'rake', '0.8.7'
    
  2. bundle install (документация Bundler гласит, что всегда нужно «устанавливать пакет» после изменения файла gem)

  3. git commit -am "Fixed heroku rake problem by specifying rake 0.8.7 in Gemfile"

  4. git push heroku

  5. heroku rake db:migrate

Я получилта же ошибка без шагов 3 и 4.

0 голосов
/ 22 июля 2011

Я использовал это, чтобы решить эту проблему раньше, не удаляя драгоценные камни.Этот метод заставит ваше приложение использовать Rake 0.8.7, который более стабилен, чем 0.9+.Вы должны запустить команду bundle update rake после указания используемой версии Rake, чтобы ваш gemfile.lock файл синхронизировался с вашим гем-файлом (если вы пропустите этот шаг, Heroku не даст вам нажать ваш код!)

В вашем файле gem укажите версию Rake для использования:

"rake", "0.8.7"

Затем выполните:

bundle update rake

Если это все еще не работает для вас, тогда выполните:

sudo gem uninstall rake
...