จะแก้ไขปัญหา 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 ที่คุณโพสต์ไว้หรือไม่? เกิดอะไรขึ้นหลังจากทำการเปลี่ยนแปลงเหล่านั้น
Zabba

คำตอบ:


205

ใส่สิ่งนี้ใน Rakefile ของคุณด้านบนต้องการ 'rake':

require 'rake/dsl_definition'

3
ขอบคุณ. นั่นช่วยแก้ปัญหาของฉันและฉันไม่รู้ว่าเกิดอะไรขึ้น (ใช้ตัวติดตั้งรางบน windows และปรับใช้กับ heroku ในฐานะผู้เริ่มต้นอย่างสมบูรณ์)
Jack V.

1
โซลูชันนี้ใช้งานได้กับ windows หรือไม่เพราะฉันยังคงได้รับข้อผิดพลาดเดียวกัน - Rake คงที่ไม่ได้เริ่มต้น :: DSL
David

2
ฉันได้รับข้อผิดพลาดในการปรับใช้กับ Heroku ซึ่งวันนี้ดึงมาใน rake 0.9.2 เนื่องจากปัญหาเดิมคือ 0.9.0 บางทีเวอร์ชันคราดอาจไม่ใช่ปัญหาอีกต่อไป การเพิ่มrequireบรรทัดลงใน rakefile (และแนะนำและกดใหม่ไปที่ github และ Heroku) แก้ไขได้ @David ฉันใช้ Windows กับ RoR framework จาก RailInstaller 1.2.0
Mark Berry

คุณจะต้องอัปเดตเป็น rake 0.9.2 เพื่อให้ใช้งานได้ โชคดี!
RubyFanatic

ฉันได้รับข้อผิดพลาดนี้เมื่อทำการ rake db: create, "no such file to load - rake / dsl_definition"
KMC

8

ทุกครั้งที่คุณเปลี่ยน Gemfile คุณจำเป็นต้องbundle installอัปเดตไฟล์ล็อก (Gemfile.lock) ข้อผิดพลาดที่คุณได้รับไม่เฉพาะเจาะจงกับการเปลี่ยนเวอร์ชันของคราด

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) นำแฮ็คที่ฉันเคยเพิ่มไปยัง Rakefile ก่อนหน้านี้โดยอิงจากคำถาม Stack Overflow 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 ที่กำหนดเวลาไว้กำลังทำงานอยู่

แก้ไข: มันไม่ทำงานได้ดีเมื่อแล้วระเบิดขึ้นอีกครั้งในครั้งต่อไปที่ผมผลักดันบางสิ่งบางอย่าง! อ๊ะ. ผมคิดว่าผมคงได้ในขณะนี้มีการเพิ่มของdelayed_jobอัญมณีที่อยู่บนพื้นฐานของการสนทนาไม่ทราบวิธีการสร้างงานงาน: ทำงาน

การติดตั้งdelayed_jobดูเหมือนจะไม่ใช่วิธีแก้ปัญหาที่ยอดเยี่ยม แต่มันใช้งานได้และฉันอาจต้องการใช้ในบางครั้งฉันคิดว่าโดยเฉพาะอย่างยิ่งกับงาน cron หนึ่งครั้งต่อชั่วโมงของ Heroku (ซึ่งไม่บ่อยพอ - มีหลายสิ่งที่ฉัน ' อาจจะต้องการเรียกใช้ทุก ๆ ห้านาที) หลังจากที่ฉันติดตั้ง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 ซึ่งระบุ rake เวอร์ชัน 0.8.7 ใน Gemfile เพื่อแก้ไขปัญหา Rake :: DSL เวอร์ชัน 0.9.2

หลังจากที่ฉันแปลงแอปเป็น Rails 3.2.0 (Heroku Cedar stack) ฉันมีปัญหากับคนงาน (งานคราด) ที่ขัดข้อง ฉันเปลี่ยน "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)
Kliment Mamykin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.