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 답변 을 시도 했습니까 ? 변경 한 후 어떻게 되었습니까?
Zabba

답변:


205

이것을 의 Rakefile에 넣으 려면 'rake'가 필요합니다.

require 'rake/dsl_definition'

3
감사합니다. 그것은 내 문제를 해결했고 무슨 일이 일어나고 있는지 몰랐습니다. (창문에와 Heroku가에 배포 설치 완전한 초보자로, 레일을 사용.)
잭 V.

1
이 솔루션은 여전히 ​​동일한 오류가 발생하기 때문에 Windows에서 작동합니까-초기화되지 않은 상수 Rake :: DSL
David

2
오늘 0.9.2 레이크를 끌어 올린 Heroku에 배포하는 동안 오류가 발생했습니다. 원래 문제가 0.9.0 이었으므로 레이크 버전이 더 이상 문제가 아닐 수 있습니다. requirerakefile에 줄을 추가하고 github 및 Heroku에 다시 커밋하고 다시 푸시하면 해결되었습니다. @David, 저는 RailInstaller 1.2.0의 RoR 프레임 워크와 함께 Windows를 사용하고 있습니다.
Mark Berry

이것이 작동하려면 0.9.2 레이크로 업데이트해야합니다. 행운을 빕니다!
RubyFanatic 2011

rake db : create를 수행 할 때이 오류가 발생합니다. "로드 할 파일 없음-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
Gemfile.lock을 다시 생성하려면 "bundle update rake"를 실행해야 할 수도 있습니다.
Jan Hettich 2011 년

6

나는 많은 비웃음 끝에 마침내 이것을 해결했습니다. 내가 한 일의 짧은 버전은 많은 실험을 놓쳤습니다.

1) Gemfile을 변경하여 Rake 0.8.7을 지정하십시오.

#in Gemfile
gem "rake", "0.8.7"

2) Stack Overflow 질문 Ruby on Rails 및 Rake 문제 : 초기화되지 않은 상수 Rake :: DSL을 기반으로 이전에 Rakefile에 추가 한 해킹을 제거합니다 .

따라서 내 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) Ruby 1.9.2에서 내 앱을 실행하도록 Heroku를 변경합니다.

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

이제 괜찮아 보입니다. 예약 된 cron 작업이 어쨌든 실행 중입니다.

편집 : 그것은 않았다 다음, 한 번 벌금을 실행 내가 뭔가를 밀어 다시 다음 번에 폭발! Arrgh. Do n't know how to build task jobs : workdelayed_job 대화를 기반으로 gem을 추가하여 지금 수정했다고 생각 합니다 .

설치 delayed_job는 훌륭한 솔루션처럼 보이지는 않지만 제대로 작동했으며, 특히 Heroku의 시간당 한 번의 크론 작업에서 사용하고 싶을 수도 있습니다. 아마도 5 분마다 실행하고 싶을 것입니다). 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

나는 0.9.2 버전 Rake :: DSL 문제를 해결하기 위해 Gemfile에서 rake 버전 0.8.7을 지정한 Rails 3.0.11 앱을 가지고 있었다.

앱을 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의 모든 버전을 고정하지 않는 한).
Kliment Mamykin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.