Heroku'da başlatılmamış sabit Rake :: DSL sorunu nasıl çözülür?


101

Ben benzeyen hatalar alıyorum içinde bu sorulara , maden üzerine gerçekleşmekte olan hariç 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>'

Bu soruların cevabı gem 'rake', '0.8.7', soruna 0.9 sürümü neden olduğu için belirtilmiş gibi görünüyor .

Ben eklemeye çalıştığınızda gem 'rake', '0.8.7'Heroku benim gemfile ve itme için bu hatayı alıyorum:

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'ım normalde Heroku'da iyi çalışıyor. Ne yapmalıyım?


Gönderdiğiniz 3 numaralı yanıtı denediniz mi? Bu değişiklikleri yaptıktan sonra ne oldu?
Zabba

Yanıtlar:


205

Senin Rakefile koy yukarıdaki 'tırmık' gerektirir:

require 'rake/dsl_definition'

3
Teşekkür ederim. Bu sorunlarımı çözdü ve neler olduğunu bilmiyordum. (Pencerelerde ve Heroku dağıtmadan yükleyici tam bir acemi olarak, raylar kullanma.)
Jak V.

1
bu çözüm Windows üzerinde çalışıyor mu çünkü hala aynı hatayı alıyorum - başlatılmamış sabit Rake :: DSL
David

2
Bugün 0.9.2 komisyonunu çeken Heroku'ya konuşlandırma hatası aldım. Asıl sorun 0.9.0 ile olduğundan, belki de sorun komisyon sürümü değildir. Ekleme requirerakefile hattı (ve recommitting ve GitHub yeniden aktarılmasını ve Heroku) o çözüldü. @David, Windows'u RailInstaller 1.2.0'dan RoR çerçevesi ile kullanıyorum.
Mark Berry

Bunun işe yaraması için 0.9.2 komisyonu güncellemeniz gerekecek. İyi şanslar!
RubyFanatic

Rake db: create, "yüklenecek böyle bir dosya yok - rake / dsl_definition"
KMC

8

Gemfile'ınızı her değiştirdiğinizde bundle install, kilit dosyanızı (Gemfile.lock) güncellemeniz gerekir. İtmeye devam ettiğiniz hata, tırmık versiyonunu değiştirmeye özgü değildir.

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

Aldığınız hata mesajını not edin:

Gemfile'ınızı geliştirme aşamasında değiştirdiniz ancak ortaya çıkan anlık görüntüyü (Gemfile.lock) sürüm kontrolünde kontrol etmediniz.


1
Gemfile.lock'u yeniden oluşturmak için "bundle update rake" çalıştırmanız gerekebilir.
Jan Hettich

6

Sonunda, bir sürü dalga geçtikten sonra bunu çözdüm. Birçok deneyi kaçırdığım şeyin kısa versiyonu şuydu:

1) Gemfile'ı Rake 0.8.7'yi belirtecek şekilde değiştirin

#in Gemfile
gem "rake", "0.8.7"

2) Daha önce Rakefile'a eklediğim bir hack'i Yığın Taşması sorusu Ruby on Rails ve Rake problemlerine dayanarak çıkarın : başlatılmamış sabit Rake :: DSL :

Dolayısıyla, Rakefile uygulamam artık uygulamam için standart Rakefile olmaya geri döndü:

# 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'yu, uygulamamı Ruby 1.9.2'de çalıştıracak şekilde değiştirin:

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

Ve şimdi iyi görünüyor - planlanmış cron görevi yine de çalışıyor.

DÜZENLEME: etmedi sonra, bir kez para cezası çalıştırmak şey itti tekrar sefere havaya uçurdu! Arrgh. Sanırım şimdi delayed_jobcevherin eklenmesiyle , sohbete dayalı olarak bunu düzelttim . Görev işlerini nasıl oluşturacağımı bilmiyorum: iş .

Kurulum delayed_jobharika bir çözüm gibi görünmüyor, ancak HAS işe yaradı ve sanırım bir ara, özellikle Heroku'nun saatte bir cron işi ile kullanmak isteyebilirim (ki bu yeterince sık değil - benim yaptığım şeyler var) muhtemelen her beş dakikada bir çalıştırmak isteyeceğim). Ben yüklü sonra delayed_jobmücevher Ben aksi Heroku eksik hakkında şikayet, bunun için kurulum yapmak zorunda delayed_jobsmasaya:

#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

Sürüm 0.9.2 Rake :: DSL sorununu aşmak için Gemfile'da rake sürümünü 0.8.7 belirleyen bir Rails 3.0.11 uygulamam vardı.

Uygulamayı Rails 3.2.0'a (Heroku Sedir yığını) dönüştürdükten sonra, işçi (bir tırmık görevi) çökmesiyle ilgili bir sorun yaşıyordum. 0.9.2.2 rake versiyonunu içeren "gem 'rake", "0.8.7" "" gem "rake" olarak değiştirdim. Çalışan, yeni sürümle çökmeyi bıraktı.


0

Sizin sorununuz Gemfile.lockdosyanın silinmemesinden kaynaklanıyor ve Heroku'ya özgü değil. Silme işlemi Gemfile.lockbu sorunu çözmelidir , ancak sizi doğrudan başka birine yönlendirecektir:

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

Maalesef, Rake'i 0.8.7'ye düşürmek burada işe yaramadığından, bu soruna henüz çözüm bulamadım. Başka birinin cevabı varsa, çok memnun olurum.


4
Kilit dosyanızı silmenizi asla önermem.
wuputah

2
Gemfile.lock'unuzu silmek, tüm mücevherlerin en son sürümlerinin tümünün heroku'ya her dağıtımda yüklenmesiyle sonuçlanacaktır (Gemfile'daki tüm sürümleri sabitlemediğiniz sürece).
Kliment Mamykin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.