Як виправити неініціалізовану постійну проблему Rake :: DSL на Heroku?


101

Я отримую помилки, подібні до цих у цих питаннях , крім того, що у Heroku трапляються мої :

2011-05-30T09:03:29+00:00 heroku[worker.1]: Starting process with command: `rake jobs:work`
2011-05-30T09:03:30+00:00 app[worker.1]: (in /app)
2011-05-30T09:03:30+00:00 heroku[worker.1]: State changed from starting to up
2011-05-30T09:03:33+00:00 app[worker.1]: rake aborted!
2011-05-30T09:03:33+00:00 app[worker.1]: uninitialized constant Rake::DSL
2011-05-30T09:03:33+00:00 app[worker.1]: /app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'

Відповідь у цих питаннях, мабуть, уточнюється, gem 'rake', '0.8.7'оскільки версія 0.9 викликає проблему.

Коли я намагаюся додати gem 'rake', '0.8.7'до свого gemfile і натиснути на Heroku, я отримую цю помилку:

Unresolved dependencies detected; Installing...
You have modified your Gemfile in development but did not check
the resulting snapshot (Gemfile.lock) into version control

You have added to the Gemfile:
* rake (= 0.8.7)
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler
error: hooks/pre-receive exited with error code 1
To git@heroku.com:my_app.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:my_app.git'

Мій gemfile зазвичай працює добре на Heroku. Що я повинен зробити?


Ви спробували відповідь №3, яку ви опублікували? Що сталося після внесення цих змін?
Забба

Відповіді:


205

Помістіть це у своєму Rakefile вище, вимагайте "рейку":

require 'rake/dsl_definition'

3
Дякую. Це вирішило мої проблеми, і я не знав, що відбувається. (Використовуючи інсталятор рейки у Windows та розгортаючись до геронку, як повний початківець.)
Джек В.

1
це рішення працює на Windows, тому що я все ще отримую ту саму помилку - неініціалізована константа Граблі :: DSL
Девід

2
Я отримав помилку при розгортанні до Heroku, який сьогодні затягнув рейку 0.9.2. Оскільки початковий випуск був з 0.9.0, можливо, версія рейку вже не є проблемою. Додавання requireрядка до рейкефайлу (а також повторне повторне натискання на github та Heroku) вирішило його. @David, я використовую Windows із рамкою RoR від RailInstaller 1.2.0.
Марк Беррі

Ну, для цього вам потрібно буде оновити граблі 0.9.2. Удачі!
RubyFanatic

Я отримую цю помилку, коли роблю rake db: create, "такого файлу не завантажувати - rake / dsl_definition"
KMC

8

bundle installЩоразу, коли ви змінюєте Gemfile, вам потрібно буде оновити файл блокування (Gemfile.lock). Помилка, яку ви отримуєте при натисканні, не характерна для зміни версії рейку.

bundle install
git commit -a -m "update lockfile"
git push heroku master

Зверніть увагу на повідомлення про помилку, яке ви отримали:

Ви змінили свій Gemfile у розробці, але не перевірили отриманий знімок (Gemfile.lock) у контролі версій


1
Можливо, вам доведеться запустити "граблі для оновлення пакета", щоб відновити Gemfile.lock.
Ян Хеттіч

6

Я вирішив це, нарешті, після багатьох роздумів. Коротка версія того, що я зробила, пропустивши безліч експериментів, була така:

1) змініть Gemfile, щоб вказати Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Вийміть хак, який я раніше додав до Rakefile на основі питання про переповнення стека Ruby on Rails та Rake: неініціалізована константа Rake :: DSL :

Отже, мій Rakefile повернувся до стандартного Rakefile для мого додатка:

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require 'rake'

MyApp::Application.load_tasks

3) Змініть Heroku, щоб запустити мій додаток у Ruby 1.9.2:

heroku stack:migrate bamboo-mri-1.9.2 --app myapp
git push heroku master

І зараз це здається прекрасним - заплановане завдання на хрон все одно працює.

EDIT: Це було прекрасно працювати, один раз, а потім підірвали в наступний раз я натиснув що - то! Arrgh. Я думаю, що я це виправив зараз, delayed_jobдодавши дорогоцінний камінь на основі розмови Не знаю, як створити завдання завдань: робота .

Встановлення delayed_jobне здається чудовим рішенням, але воно спрацювало, і я, можливо, хотів би його використати колись, напевно, особливо з роботою хронону Хероку раз на годину (яка просто недостатня частота - є речі, які я ' Напевно, я хочу ходити кожні п’ять хвилин). Після того як я встановив delayed_jobдорогоцінний камінь, мені довелося зробити налаштування для нього, інакше Heroku скаржиться на відсутність delayed_jobsтаблиці:

#add to gemfile
gem 'delayed_job'

#at command line
bundle install
rails g delayed_job
rake db:migrate
git add -A
git commit -a -m "added delayed_job gem"
git push
heroku rake db:migrate --app myapp
heroku restart --app myapp

1

У мене був додаток Rails 3.0.11, який вказав версію рейку 0.8.7 в Gemfile, щоб обійти версію 0.9.2 Rake :: DSL.

Після перетворення програми на Rails 3.2.0 (стек Heroku Cedar) у мене виникли проблеми з збоєм працівника (завдання граблі). Я змінив "gem 'rake', '0.8.7'" на "gem 'rake'", який постачав рейку версії 0.9.2.2. Робітник припинив збої з новою версією.


0

Ваша проблема викликана не видаленням Gemfile.lockфайлу і не характерна для Heroku. Видалення Gemfile.lockмає вирішити цю проблему, але перейде до іншої:

To git@heroku.com:tailored-landing-pages.git
 * [new branch]      master -> master
manfred@painstation2:~/Desktop/projects/ror/ta/tlp307$ heroku rake db:migrate
rake aborted!
ninitialized constant Rake::DSL
/app/Rakefile:13:in `<class:Application>'
/app/Rakefile:12:in `<module:Tlp307>'
/app/Rakefile:11:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

На жаль, я ще не знайшов рішення для цієї проблеми, оскільки зниження рівня Rake до 0.8.7 тут не працює. Якщо хтось ще має відповідь, я дуже вдячний.


4
Я б ніколи не рекомендував видаляти ваш файл блокування.
wuputah

2
Видалення Gemfile.lock призведе до встановлення всіх останніх версій усіх дорогоцінних каменів при кожному розгортанні до heroku (якщо ви не закріпите всі версії в Gemfile).
Климент Мамикін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.