Bagaimana cara memperbaiki masalah Rake :: DSL konstan yang tidak diinisialisasi di Heroku?


101

Saya mendapatkan kesalahan serupa dengan yang di ini pertanyaan , kecuali tambang yang terjadi pada 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>'

Jawaban dalam pertanyaan tersebut sepertinya ditentukan gem 'rake', '0.8.7'karena versi 0.9 menyebabkan masalah.

Ketika saya mencoba menambahkan gem 'rake', '0.8.7'ke gemfile saya dan mendorong ke Heroku, saya mendapatkan kesalahan ini:

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 saya biasanya berfungsi dengan baik di Heroku. Apa yang harus saya lakukan?


Apakah Anda mencoba jawaban # 3 yang Anda posting? Apa yang terjadi setelah melakukan perubahan tersebut?
Zabba

Jawaban:


205

Taruh ini di Rakefile Anda di atas membutuhkan 'rake':

require 'rake/dsl_definition'

3
Terima kasih. Itu memperbaiki masalah saya dan saya tidak tahu apa yang sedang terjadi. (Menggunakan penginstal rel di windows dan menerapkan ke heroku, sebagai pemula yang lengkap.)
Jack V.

1
apakah solusi ini berfungsi di windows karena saya masih mendapatkan kesalahan yang sama - Rake konstan yang tidak diinisialisasi :: DSL
David

2
Saya mendapat kesalahan saat menerapkan ke Heroku, yang hari ini menarik rake 0.9.2. Karena masalah aslinya adalah dengan 0.9.0, mungkin versi rake tidak lagi menjadi masalah. Menambahkan requirebaris ke rakefile (dan berkomitmen ulang dan mendorong kembali ke github dan Heroku) menyelesaikannya. @David, saya menggunakan Windows dengan kerangka RoR dari RailInstaller 1.2.0.
Mark Berry

Anda harus memperbarui untuk menyapu 0.9.2 agar ini berfungsi. Semoga berhasil!
RubyFanatic

Saya mendapatkan kesalahan ini saat melakukan rake db: create, "tidak ada file seperti itu untuk dimuat - rake / dsl_definition"
KMC

8

Setiap kali Anda mengubah Gemfile Anda, Anda perlu bundle installmemperbarui file kunci Anda (Gemfile.lock). Kesalahan yang Anda dorong tidak spesifik untuk mengubah versi rake.

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

Perhatikan pesan kesalahan yang Anda terima:

Anda telah memodifikasi Gemfile Anda dalam pengembangan tetapi tidak memeriksa snapshot yang dihasilkan (Gemfile.lock) ke dalam kontrol versi


1
Anda mungkin perlu menjalankan "bundle update rake" untuk membuat ulang Gemfile.lock.
Jan Hettich

6

Saya menyelesaikan ini, akhirnya, setelah banyak penyia-nyiaan. Versi singkat dari apa yang saya lakukan, kehilangan banyak eksperimen, adalah ini:

1) ubah Gemfile untuk menentukan Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Keluarkan retasan yang sebelumnya saya tambahkan ke Rakefile berdasarkan pertanyaan Stack Overflow Ruby on Rails and Rake problems: Rake: DSL konstan yang tidak diinisialisasi :

Jadi, Rakefile saya sekarang kembali menjadi Rakefile standar untuk aplikasi saya:

# 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) Ubah Heroku untuk menjalankan aplikasi saya di Ruby 1.9.2:

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

Dan sekarang tampaknya baik-baik saja - tugas cron terjadwal tetap berjalan.

EDIT: Ini tidak berjalan baik, sekali, kemudian meledakkan lagi lain kali aku mendorong sesuatu! Arrgh. Saya rasa saya memperbaikinya sekarang, dengan tambahan delayed_jobpermata, berdasarkan percakapan Tidak tahu bagaimana membangun tugas pekerjaan: bekerja .

Menginstal delayed_jobsepertinya bukan solusi yang bagus, tetapi TELAH berhasil, dan saya mungkin ingin menggunakannya kapan-kapan, terutama dengan tugas cron sekali per jam Heroku (yang tidak cukup sering - ada hal-hal yang saya ' Anda mungkin ingin berlari setiap lima menit). Setelah saya menginstal delayed_jobpermata saya harus melakukan pengaturan untuk itu, jika tidak Heroku mengeluh tentang delayed_jobstabel yang hilang :

#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

Saya memiliki aplikasi Rails 3.0.11, yang menentukan versi rake 0.8.7 di Gemfile untuk mengatasi masalah Rake :: DSL versi 0.9.2.

Setelah saya mengonversi aplikasi ke Rails 3.2.0 (tumpukan Heroku Cedar), saya mengalami masalah dengan pekerja (tugas menyapu) yang mogok. Saya mengubah "gem 'rake', '0.8.7'" menjadi "gem 'rake'", yang menggabungkan rake versi 0.9.2.2. Pekerja berhenti mogok dengan versi baru.


0

Masalah Anda disebabkan oleh tidak menghapus Gemfile.lockfile dan tidak spesifik untuk Heroku. Menghapus Gemfile.lockseharusnya memperbaiki masalah ini, tetapi akan mengarahkan Anda langsung ke masalah lain:

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>'

Sayangnya, saya belum menemukan solusi untuk masalah itu, karena menurunkan versi Rake ke 0.8.7 sepertinya tidak berfungsi di sini. Jika orang lain memiliki jawaban, saya akan sangat menghargainya.


4
Saya tidak akan merekomendasikan menghapus file kunci Anda.
wuputah

2
Menghapus Gemfile.lock Anda akan mengakibatkan penginstalan semua versi terbaru dari semua permata pada setiap penerapan ke heroku (kecuali Anda menyematkan semua versi di Gemfile).
Kliment Mamykin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.