2011-05-30 94 views
100

我收到錯誤類似於那些inthesequestions,除了礦山都存在的對Heroku如何解決Heroku上未初始化的常量Rake :: DSL問題?

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 [email protected]:my_app.git 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to '[email protected]:my_app.git' 

我的Gemfile正常工作正常在Heroku。我該怎麼辦?

+0

您是否嘗試過發佈了[#3答案](http://stackoverflow.com/questions/5287121/undefined-method-task-using-rake-0-9-0/5290331#5290331)?做出這些改變後發生了什麼? – Zabba 2011-05-31 00:31:09

回答

205

將這個在你的Rakefile 上述需要「耙」:

require 'rake/dsl_definition' 
+3

該死的,比我的解決方案簡單得多! :/ – 2011-06-07 15:26:56

+3

謝謝。這解決了我的問題,我不知道發生了什麼。 (在Windows上使用rails安裝程序,並將其部署到heroku,作爲一個完整的初學者。) – 2011-06-14 22:46:52

+1

在windows上執行此解決方案的工作,因爲我仍然收到相同的錯誤 - 未初始化的常量Rake :: DSL – David 2011-06-20 08:05:10

0

你的問題是由於沒有刪除Gemfile.lock文件引起的,並不是Heroku特有的。刪除Gemfile.lock要解決這個問題,但會直接導致你到另一個問題:

To [email protected]:tailored-landing-pages.git 
* [new branch]  master -> master 
[email protected]:~/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>' 

不幸的是,我還沒有找到該問題的解決方案還沒有,因爲降級耙0.8.7似乎不工作這裏。如果其他人有答案,我會非常感激。

+4

我永遠不會建議刪除你的lockfile。 – wuputah 2011-06-10 01:05:25

+2

刪除您的Gemfile.lock將導致在每個部署到heroku上安裝所有gem的所有最新版本(除非您將所有版本固定在Gemfile中)。 – 2011-06-17 08:19:00

6

我解決了這個問題,最後經過大量的瑣事。我所做的短版,錯過了許多實驗,是這樣的:

1)改變Gemfile中指定的Rake 0.8.7

#in Gemfile 
gem "rake", "0.8.7" 

2)取出來,我以前又增加了一個黑客到Rake文件基於堆棧溢出 問題Ruby on Rails and Rake problems: uninitialized constant 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 

現在它似乎罰款 - 預定的cron任務運行反正。

編輯:它沒有運行良好,一次,然後再次炸燬我下次推我的東西! Arrgh。我想我現在修好了,加上delayed_job寶石,基於對話Don't know how to build task jobs:work

安裝delayed_job似乎不是一個很好的解決方案,但它已經工作了,我可能想在某個時候使用它,尤其是在Heroku每小時一次的cron作業中(這不夠頻繁 - 有些事情我可能會想每五分鐘運行一次)。我安裝了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 
8

每次更改Gemfile時,都需要bundle install來更新您的鎖文件(Gemfile.lock)。你推動的錯誤並不是特定於更改耙式的版本。

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

注意您收到此錯誤信息:

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

+1

您可能需要運行「bundle update rake」來重新生成Gemfile.lock。 – 2011-06-18 23:51:33

1

我有一個Rails 3.0.11應用程序,其中規定在Gemfile中耙版本0.8.7,以繞過版本0.9.2耙: :DSL問題。

將應用程序轉換爲Rails 3.2.0(Heroku Cedar堆棧)之後,我遇到了工人(rake任務)崩潰的問題。我將「寶石耙子」,「0.8.7」改爲「寶石耙子」,它捆綁了耙子版本0.9.2.2。工作人員停止使用新版本崩潰。

相關問題