Làm thế nào để khắc phục sự cố liên tục Rake :: DSL chưa được khởi tạo trên Heroku?


101

Tôi gặp lỗi tương tự như những lỗi trong những câu hỏi này , ngoại trừ lỗi của tôi đang xảy ra trên 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>'

Câu trả lời trong những câu hỏi đó dường như chỉ định gem 'rake', '0.8.7'vì phiên bản 0.9 gây ra sự cố.

Khi tôi cố gắng thêm gem 'rake', '0.8.7'vào tệp gem của mình và đẩy lên Heroku, tôi gặp lỗi này:

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 của tôi thường hoạt động tốt trên Heroku. Tôi nên làm gì?


Bạn đã thử câu trả lời số 3 mà bạn đã đăng chưa? Điều gì đã xảy ra sau khi thực hiện những thay đổi đó?
Zabba

Câu trả lời:


205

Đặt cái này vào Rakefile của bạn ở trên yêu cầu 'rake':

require 'rake/dsl_definition'

3
Cảm ơn bạn. Điều đó đã khắc phục sự cố của tôi và tôi không biết chuyện gì đang xảy ra. (Sử dụng đường ray cài đặt trên cửa sổ và triển khai để Heroku, như một người mới bắt đầu hoàn tất.)
Jack V.

1
làm việc giải pháp này trên cửa sổ, vì tôi vẫn nhận được cùng một lỗi - chưa được khởi tạo liên tục Rake :: DSL
David

2
Tôi gặp lỗi khi triển khai đến Heroku, hôm nay đã lấy rake 0.9.2. Vì vấn đề ban đầu là với 0.9.0, có lẽ phiên bản rake không còn là vấn đề nữa. Thêm requiredòng vào tệp rakefile (và gửi lại và đẩy lại tới github và Heroku) đã giải quyết được vấn đề đó. @David, tôi đang sử dụng Windows với khuôn khổ RoR từ RailInstaller 1.2.0.
Mark Berry

Bạn sẽ cần cập nhật lên cào 0.9.2 để nó hoạt động. Chúc may mắn!
RubyFanatic

Tôi nhận được lỗi này khi làm rake db: tạo, "không có tập tin để tải - cào / dsl_definition"
KMC

8

Bất kỳ khi nào bạn thay đổi Gemfile của mình, bạn cần phải bundle installcập nhật tệp khóa (Gemfile.lock) của mình. Lỗi bạn nhận được khi đẩy không phải là lỗi cụ thể để thay đổi phiên bản của rake.

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

Lưu ý thông báo lỗi bạn nhận được:

Bạn đã sửa đổi Gemfile của mình trong quá trình phát triển nhưng không kiểm tra ảnh chụp nhanh kết quả (Gemfile.lock) trong kiểm soát phiên bản


1
Bạn có thể cần chạy "gói cập nhật rake" để tạo lại Gemfile.lock.
Jan Hettich

6

Cuối cùng thì tôi đã giải quyết được vấn đề này sau rất nhiều điều. Phiên bản ngắn gọn của những gì tôi đã làm, bỏ qua nhiều thử nghiệm, là:

1) thay đổi Gemfile để chỉ định Rake 0.8.7

#in Gemfile
gem "rake", "0.8.7"

2) Thực hiện một bản hack mà trước đó tôi đã thêm vào Rakefile dựa trên câu hỏi Stack Overflow của Ruby on Rails và các vấn đề về Rake: không đổi được khởi tạo Rake :: DSL :

Vì vậy, Rakefile của tôi bây giờ đã trở lại là Rakefile tiêu chuẩn cho ứng dụng của tôi:

# 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) Thay đổi Heroku để chạy ứng dụng của tôi trong Ruby 1.9.2:

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

Và bây giờ có vẻ ổn - tác vụ cron đã lên lịch vẫn đang chạy.

CHỈNH SỬA: Nó đã chạy tốt, một lần, sau đó nổ tung lần sau khi tôi đẩy một cái gì đó! Arrgh. Tôi nghĩ rằng tôi đã sửa nó ngay bây giờ, với việc bổ sung delayed_jobđá quý, dựa trên cuộc trò chuyện Không biết cách xây dựng các công việc nhiệm vụ: công việc .

Cài đặt delayed_jobcó vẻ không phải là một giải pháp tuyệt vời, nhưng nó ĐÃ hoạt động và tôi có thể muốn sử dụng nó vào lúc nào đó, đặc biệt là với công việc cron một lần mỗi giờ của Heroku (điều này không đủ thường xuyên - có những điều tôi ' Tôi có thể muốn chạy năm phút một lần). Sau khi cài đặt delayed_jobgem, tôi phải thiết lập nó, nếu không Heroku phàn nàn về delayed_jobsbảng bị thiếu :

#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

Tôi đã có một ứng dụng Rails 3.0.11, chỉ định phiên bản rake 0.8.7 trong Gemfile để khắc phục sự cố Rake :: DSL phiên bản 0.9.2.

Sau khi tôi chuyển đổi ứng dụng sang Rails 3.2.0 (ngăn xếp Heroku Cedar), tôi đã gặp sự cố với lỗi worker (tác vụ cào). Tôi đã thay đổi "gem 'rake', '0.8.7'" thành "gem 'rake'", bao gồm phiên bản rake 0.9.2.2. Công nhân đã ngừng gặp sự cố với phiên bản mới.


0

Vấn đề của bạn là do không xóa Gemfile.locktệp và không phải dành riêng cho Heroku. Việc xóa Gemfile.locksẽ khắc phục được sự cố này, nhưng sẽ dẫn bạn thẳng đến một vấn đề khác:

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

Thật không may, tôi vẫn chưa tìm ra giải pháp cho vấn đề đó, vì việc hạ cấp Rake xuống 0.8.7 dường như không hoạt động ở đây. Nếu ai đó có câu trả lời, tôi sẽ đánh giá rất cao.


4
Tôi không bao giờ khuyên bạn nên xóa tệp khóa của bạn.
wuputah

2
Xóa Gemfile.lock của bạn sẽ dẫn đến việc cài đặt tất cả các phiên bản mới nhất của tất cả đá quý trên mỗi lần triển khai cho heroku (trừ khi bạn ghim tất cả các phiên bản trong Gemfile).
Kliment Mamykin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.