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.