如何修复Heroku上未初始化的常量Rake :: DSL问题?


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答案?进行这些更改后会发生什么?
2011年

Answers:


205

将其放在您的Rakefile中,上面需要'rake':

require 'rake/dsl_definition'

3
谢谢。那解决了我的问题,我不知道发生了什么。(作为一个完整的初学者,使用Windows上的rails安装程序并部署到heroku。)
Jack

1
这个解决方案在Windows上有效吗,因为我仍然遇到相同的错误-未初始化的常量Rake :: DSL
David

2
我在部署到Heroku时遇到了错误,今天它的收益为0.9.2。由于最初的问题是0.9.0,因此耙版本不再是问题。将require行添加到rakefile中(然后重新提交并重新推送到github和Heroku)即可解决该问题。@David,我将Windows与RailInstaller 1.2.0中的RoR框架一起使用。
马克·贝里

好吧,您需要更新至rake 0.9.2才能运行。祝好运!
RubyFanatic 2011年

执行rake db:create时出现此错误,“没有要加载的文件-rake / dsl_definition”
KMC

8

每次更改Gemfile时,都需要bundle install更新锁文件(Gemfile.lock)。您遇到的错误并非特定于更改rake的版本。

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

请注意您收到的错误消息:

您已经在开发中修改了Gemfile,但没有将生成的快照(Gemfile.lock)检入版本控制


1
您可能需要运行“ bundle update rake”以重新生成Gemfile.lock。
Jan Hettich

6

经过大量的思考之后,我终于解决了这个问题。我所做的工作的简短版本(缺少许多实验)是:

1)更改Gemfile以指定Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2)基于堆栈溢出问题Ruby on Rails和Rake问题,取出我先前添加到Rakefile中的hack :未初始化的常量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任务仍在运行。

编辑:确实运行良好,一次,然后下次我推东西时再次炸毁!啊 我想我现在delayed_job根据对话修复了它,并添加了宝石,不知道如何建立任务作业:

安装delayed_job似乎不是一个很好的解决方案,但是它已经奏效了,我想我可能想在某个时候使用它,尤其是在Heroku每小时一次的cron作业中(这不是很频繁-我有些事情是可能要每五分钟运行一次)。安装delayed_jobgem 之后,必须对其进行设置,否则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应用程序,该应用程序在Gemfile中指定rake版本0.8.7来解决0.9.2 Rake :: DSL问题。

将应用程序转换为Rails 3.2.0(Heroku Cedar堆栈)后,我遇到了工作程序崩溃(耙任务)的问题。我将“ gem'rake','0.8.7'”更改为“ gem'rake'”,该版本捆绑了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时安装所有gem的所有最新版本(除非您将所有版本固定在Gemfile中)。
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.