Các vấn đề về Ruby on Rails và Rake: hằng số chưa được khởi tạo Rake :: DSL


189

Tôi đang có một vấn đề thực sự bực bội: Rake đang bị câm.

Đây là cách vấn đề xảy ra:

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

Cả hai đều hoạt động tốt, nhưng sau đó khi tôi làm điều này,

$ rake db:migrate

Tôi nhận được lỗi sau đây.

(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'

Tôi đã xem xét về Internet về các lỗi tương tự / tương tự và mọi người đã mắc phải chúng. Chỉ là không ai từng giải quyết vấn đề!

Làm sao để sửa lỗi này?

Câu trả lời:


193

Một tweet từ DHH trước đó. Rake .9.0 phá vỡ Rails và một số thứ khác, bạn cần phải:

gem "rake", "0.8.7"

trong Gemfile của bạn.


17
Điều này làm việc cho tôi. Tôi cần phải làm bundle update rakeđầu tiên. Sau đó tôi kiểm tra với bundle show rake. Nó sẽ nói 0.8.7. Sau đó rake db:migrate.
B Bảy

26
Hoặc thậm chí tốt hơn : gem "rake", "!= 0.9.0". Điều này tránh được bản phát hành 0.9.0 bị hỏng, nhưng sẽ cập nhật lên bản mới hơn sau khi bản phát hành mới hơn được xuất bản (loại bỏ bản này sau này sẽ không bị tổn thương, nhưng giữ nó cũng không bị tổn thương).
Xoắn ốc

6
@Spirusis Tôi cũng gặp vấn đề với phiên bản 0.9.2. Vì vậy, bạn có thể phải thêm dòng đó cho một vài phiên bản.
dharmatech

3
Giải pháp này làm việc cho tôi. Giống như @dharmatech, tôi gặp phải vấn đề heroku rake db:migratenày và điều này dường như đã khắc phục nó. nhớ thêm và cam kết những thay đổi này với git trước khi tiếp tục;)
pruett

1
Điều này có thể hoạt động cho Rails, nhưng tôi cũng phải làm sudo gem install rakeđể đảm bảo rằng rakephiên bản tôi đang gọi từ dòng lệnh không phải là 0.8.7.
Autumnsault

72

Tôi đã thực hiện một số nghiên cứu ngay sau câu trả lời trước đó của tôi (xin lỗi, tôi phải làm trước khi nó).

Tất cả các vấn đề được giải quyết với Rake gem 0.9.2 .. Tôi đã làm theo các bước sau:

  • Tôi đã cài đặt gem install rake -v=0.9.2(Tôi đã có đá quý 0.9.1)
  • loại bỏ 0.9.1 với gem uninstall rake -v=0.9.1
  • cập nhật với bundle update
  • sau đó db:migratecho thấy một cảnh báo,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Nó đã được giải quyết bằng cách thêm phần sau vào tệp Rake.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • Tôi đã sử dụng module ::RakeFileUtils extend Rake::FileUtilsExtendtùy chọn bị chặn bởi @databyte.

Nó có nghĩa là Rake gem 0.9.2 hoạt động tốt!


Thực hiện theo ba bước đầu tiên và tôi không nhận được cảnh báo nào nên đã không bận tâm với phần còn lại, Cảm ơn bạn đã gợi ý!
Abe Petrillo

1
Điều này cầu xin tôi hỏi ... Tại sao tôi nên hack Rake để giữ lại tính năng đó? Rake đang cố gắng làm gì và tôi nên sử dụng cái gì bây giờ?
Ryanmt

@Arrumaco, thư mục cho tệp Rake là gì?
Ctak

Điều đáng chú ý là việc bổ sung RakeFilecần phải có trước đây require 'rake'- đã khiến tôi hiểu ra :)
Ciaran Archer

12
cùng một vấn đề, nhưng tôi đã bị cào (0.9.2, 0.8.7). Cài đặt lại 0.9.2 dường như khắc phục sự cố mặc dù: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.

54

Đi qua Chương 2 của Railstutorial (demo_app) và gặp phải vấn đề này. Tôi đã thử tất cả các câu trả lời khác được liệt kê ở đây, nhưng không thể làm cho nó hoạt động cho đến khi tôi làm điều này:

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

require 'rake/dsl_definition'

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

Tôi cũng đã giới thiệu và đẩy tất cả các tệp đến Github và Heroku.


Đây có vẻ là câu trả lời tốt nhất kể từ khi hạ cấp từ 0.9.2 xuống 0.8.7 sẽ phá vỡ một số phụ thuộc đá quý tùy thuộc vào từng trường hợp, chẳng hạn như của tôi :) Cảm ơn!
DiegoSalazar

Nó không làm việc cho tôi. Tôi nhận được "không có tệp nào để tải - rake / dsl_def định" khi thực hiện rake db: tạo
KMC

25

Tất cả những gì tôi cần làm là sử dụng:

gem install rake

Tôi đã có phiên bản 0.9.2 rồi, chỉ cần cài đặt.


wow nó làm việc cho tôi Nhưng bạn có thể giải thích tại sao tôi phải cài đặt cào trong khi tôi nên cào không?
KMC

Tôi thực sự không phải là một chuyên gia, nhưng tôi hiểu rằng có một sự khác biệt giữa 'cài đặt' đá quý vào PC của bạn và 'cài đặt' chúng trong sổ đăng ký đá quý - Tôi nghi ngờ điều này là do cài đặt Ruby cần biết đá quý nào nơi trên PC của bạn. Có lẽ đây là thứ có thể được tự động hóa trong tương lai hoặc đã được tự động hóa trong một số bản phân phối Ruby nhất định ...
Branstar

19

Cài đặt lại đá quý cào và nó sẽ hoạt động tốt:

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

Nếu không, chỉ định phiên bản '0.8.7' trong Gemfile của bạn.


Cách tiếp cận này hiệu quả với tôi và tôi không muốn phải hạ cấp phiên bản ..
Tarnschaf

Làm việc cho tôi cũng vậy, chỉ với cào -v 0.9.2.2
Haspemulator

10

Nếu không sử dụng Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Sau đó chọn gỡ cài đặt 0.9.0.


cái này đã sửa nó cho tôi mà không có bộ đệm (đường ray 2.3.8). Đã thử cài đặt rake 0.9.2 nhưng không khắc phục được. Cài đặt 0.8.7 và gỡ cài đặt 0.9.2 là những gì cuối cùng đã làm việc với tôi.
Michael Durrant

8

Nếu giống như tôi, bạn bị kẹt trên cào 0.8.7 và bạn đang sử dụng Rails 3.2.x thì đường ray sẽ thêm yêu cầu cho Rake :: DSL

Để giải quyết vấn đề này, trên đầu trang Rakefile của bạn, bạn nên thêm:

module Rake
  module DSL
  end
end

7

Tôi đã giải quyết vấn đề tương tự với các bước sau:

Trong Gemfile:

gem 'rake', '0.9.2'

Sau đó chạy cái này trên bàn điều khiển:

sudo bundle update rake

Sau đó thêm các dòng sau vào Rakefile:

require 'rake/dsl_definition'
include Rake::DSL

6

Rails 3.1.rc1 đã được cập nhật. Đối với Rakefiles của riêng bạn, bạn có thể thêm phần này trước lệnh gọi vào load_t Nhiệm vụ.

module ::YourApplicationName
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end

https://gist.github.com/4cd2bbe68f98f2f0249f

CẬP NHẬT: Cũng nhận thấy rằng nó cũng đã được trả lời ở đây: Phương thức 'nhiệm vụ' không xác định bằng Rake 0.9.0


4

Tôi có cùng một vấn đề và đã phải sử dụng đá quý rake 0.8.7 thay vì 0.9.0.


4

Tôi là người dùng Windows XP và tôi gặp vấn đề tương tự.

Tôi đã nhập gem "rake", "0.8.7" vào gemfile và sau đó gõ dòng chữ sau từ cửa sổ lệnh.

bundle update rake

Điều này đã khắc phục vấn đề của tôi.


làm việc cho tôi quá, như ngày hôm nay. chỉ cần cố gắng mã đường ray trên Win7.
arscarious

4
  1. Đi đến con đường dự án của bạn
  2. Kiểu bundle install --path=vendor/bundle
  3. Kiểu bundle exec rake db:migrate

Để bắt đầu loại máy chủ bundle exec rails s. Sử dụng gói exec exec và bạn sẽ chắc chắn rằng bạn sử dụng đúng gem (phiên bản bắt buộc) cho dự án của bạn. Ngoài ra tôi sẽ khuyên bạn nên thêm vendor/bundlevào .gitignorenếu bạn sử dụng gitvà tạo bí danh cho bundle exec. Nếu bạn sử dụng, zshbạn có thể làm theo phương pháp này


3

Tương tự như Branstar ở trên - cảm ơn Branstar!

  • HĐH: Windows Vista
  • Cấp độ: Hoàn toàn mới đối với Ruby on Rails
  • Tôi đã cài đặt Ruby 1.9.2

Tôi đã làm theo hướng dẫn trong Running Rails 3 trên Windows .

Tất cả đều hoạt động cho đến khi phần "rake db: di chuyển" mang lại cho tôi đầu ra giống như bài đăng gốc.

Tôi đã chạy

gem install rake

Tôi lại chạy:

rake db:migrate

Sau đó, tôi đã có thể khởi động máy chủ Ruby on Rails và có mọi thứ tại chỗ.

Cảm ơn một lần nữa Branstar :-)


2

Tôi cảm thấy cho bạn (mikhailvs), nó thực sự bực bội. Tôi đã phát điên trong gần một ngày. Tôi thậm chí đã gỡ cài đặt Ruby và tất cả các tệp phụ thuộc của nó và tắt PC của tôi, nhưng tôi vẫn gặp vấn đề tương tự.

Những gì tôi nhận được từ thông báo lỗi là sự cố với Rake 0.9.2. Có vẻ như nó chưa được cài đặt đầy đủ. Vì vậy, tôi đã phải cài đặt lạigem install rake -v=0.9.2

Tôi không chắc chắn nếu tôi đã cài đặt rakeTHERv0.9.1. Vì vậy, để đảm bảo an toàn, tôi đã cố gắng loại bỏ phiên bản cũ đó gem uninstall rake -v=0.9.1. Nhưng được hiển thị cho tôi thông báo lỗi

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

OK, vì vậy tôi đã kiểm tra tất cả các thư mục Rake trên PC của mình và thấy tôi chỉ có Rake 0.9.2. Sau đó để kiểm tra xem mọi thứ có ổn không, tôi di chuyển cùng rake db:migrate. Va no đa hoạt động :)

Tôi nghĩ rằng tôi đã không có Rake 0.9.1 vì tôi đã cài đặt sạch Ruby ( rubyinstaller-1.9.2-p180 - trên hệ thống Windows 7 của tôi) và tất cả các loại đá quý. Trong khi đó, Rake 0.9.2 chưa được cài đặt đầy đủ.


2

Gỡ cài đặt với "gem Uninstall rake" hoạt động với tôi, tôi đã cài đặt 2 phiên bản, vì vậy tôi đã cài đặt lại sạch.

"rake db: tạo" , để đảm bảo cơ sở dữ liệu tồn tại và sau đó "rake db: di chuyển" để đóng dấu thỏa thuận.


2

Tôi gặp vấn đề tương tự khi sử dụng Rake 0.9.2.2. Tôi đã giải quyết vấn đề này bằng cách sử dụng gói exec.



0

Cài đặt rake 0.8.7 và gỡ cài đặt 0.9.2.2

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

Bây giờ sử dụng

$ bundle exec rake db:migrate

tôi nghĩ rằng điều này sẽ giúp bạn;)


0

Chạy

bundle exec rake db:migrate

nó làm việc cho tôi

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.