Quyền truy cập toàn cầu vào các phương thức Rake DSL không được dùng nữa


86

Tôi đang làm việc thông qua cuốn sách hướng dẫn Ruby on Rails 3 và đã nhập dòng lệnh sau vào dòng lệnh:

rake db:migrate

đã tạo ra cảnh báo sau.

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

Tôi không chắc phải làm gì với nó hoặc làm thế nào để làm việc với nó. Tôi không biết lệnh nào khác cho Rake.

Làm cách nào để khắc phục sự cố này?

Câu trả lời:


64

Tôi tìm thấy điều này trong câu hỏi Stack Overflow của Ruby on Rails và các vấn đề về Rake: hằng số chưa khởi tạo Rake :: DSL . Nó đề cập đến một tweet @DHH.

Đặt những thứ sau vào Gemfile của bạn

gem "rake", "0.8.7"

Bạn có thể thấy một cái gì đó giống như

rake aborted!
You have already activated Rake 0.9.1 ...

Tôi vẫn còn một bản sao của Rake 0.9.1 trong thư mục của mình nên tôi đã xóa nó.

Bạn có thể "xóa" Rake 0.9.1 bằng cách chạy lệnh sau:

gem uninstall rake -v=0.9.1

Nếu bạn đã cài đặt nhiều phiên bản gem, bạn sẽ được nhắc chọn một phiên bản.

Sau khi 0.9.1 được làm sạch, tôi chạy

bundle update rake

và cuối cùng đã có thể tạo các tệp cơ sở dữ liệu của tôi. Tôi đã sử dụng rake db:create, nhưng nó cũng sẽ hoạt động rake db:migrate.

Tôi hy vọng nó sẽ giúp.


5
Điều đó đã không làm việc cho tôi. Tôi đã thực sự loại bỏ cào 0.9.1> đá quý uninstall cào -v = 0.9.1 và sau đó> bó cập nhật Cảm ơn Antonio

1
Tôi đồng ý với Antonio - khi tôi nói bỏ rake 0.9.1, ý tôi là thông qua việc sử dụng gem uninstall rake -v=0.9.1. Sai lầm của tôi vì đã không nói rõ. Cảm ơn vì Antonio đã làm rõ! Chúc mừng, Brian
Brian Bruijn

13
Tôi không nghĩ là tốt khi cố tình sử dụng các thư viện cũ, khi một thư viện mới hơn có thể hoạt động, hãy xem bình luận bên dưới.
Smar

2
Giải pháp đơn giản hơn là giải pháp do NPatel gợi ý dưới đây. Chỉ cần thêm một dòng vào Rakefile.
Slobodan Kovacevic

Tôi đã không có bất kỳ may mắn với giải quyết này. Nó vẫn xuất hiện cùng một lỗi sau khi gỡ cài đặt rake 0.9.1 hoặc 0.9.2 sau đó chạy cập nhật gói.
Marc

111

Tôi cũng có thể thêm include Rake::DSLvào Rakefile trước khi load_tasks ứng dụng được gọi.

Vì vậy, trong trường hợp của người dùng ở trên trước khi DemoApp::Application.load_taskstrong Rakefile.


Cảm ơn. Đã sửa lỗi "CẢNH BÁO: Quyền truy cập toàn cầu vào các phương pháp Rake DSL không được dùng nữa." vấn đề.
Slobodan Kovacevic

Đây có phải là cách thích hợp để khắc phục sự cố này không?
Marc

2
@Marc, hiện tại đây là bản sửa lỗi duy nhất mà tôi biết mà không cần nâng cấp lên đường ray 3.0.8 trở lên. Sự cố này được giải quyết trong bản phát hành đó: github.com/rails/rails/commit/… . Nếu bạn tìm thấy một bản sửa lỗi tốt hơn, vui lòng cho tôi biết. Ngoài ra, theo cảnh báo, tôi sẽ nghĩ rằng đó là cách sửa chữa thích hợp.
Patelify

1
Đây là giải pháp tôi đã đi cùng. Tôi chỉ muốn thêm dòng hơn là chơi trò chơi với phiên bản Rake hoạt động với cái gì.
jaydel

2
Điều này làm việc cho tôi với 1.9.2 và Rails 3.0.7 với Rake 0.9.2
Steven Chanin

5

Tôi đã gặp sự cố tương tự trên Windows với trình cài đặt. Ruby 1.9.2 và Rails 3.0.9. Đây là những gì tôi đã làm:

bundle update rake
bundle show rake

Sau khi làm điều đó, tôi đã chạy rake 0.9.2.

Sau đó, tôi cập nhật Rakefile trong thư mục gốc của ứng dụng như sau:

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

Như đã lưu ý trong nhận xét, hãy đảm bảo tên ứng dụng của bạn chính xác trong hai dòng thích hợp ở trên.


1
Và để heroku rake db:migratelệnh hoạt động, tôi cũng phải thêm require 'rake/dsl_definition'vào tệp rakefile (phía trên dòng "rake" yêu cầu).
LikeMaBell

Làm tất cả những điều này phù hợp với tôi, nhưng không cần thiết. Đề xuất của NPatel đã xử lý tốt.
Scott Swezey

0

Nếu bạn thấy điều này trên các phiên bản sau của Rails (như 3. +), bạn cũng có thể muốn xác minh rằng môi trường của mình trong sạch bằng cách sử dụng RVM http://beginrescueend.com/ và tạo một ruby ​​& gemset cụ thể cho các dự án của bạn.

Sử dụng tệp .rvmrc trên cơ sở từng dự án, điều này sẽ đảm bảo bạn không nhận được các viên ngọc hệ thống cũ hơn vào các dự án của mình. Mà đã cắn tôi trước đây.

Điều này giúp bạn không phải loanh quanh với các tệp Rakefiles đã tạo và như vậy.


0

gói thực thi rake db: di chuyển sẽ giải quyết các vấn đề về phiên bản ruby ​​của bạn


Điều này chỉ hoạt động nếu bạn có một phiên bản làm việc của cào trong Gemfile của bạn, và gõ "cào" được sử dụng một số phiên bản khác nhau được cài đặt trong PATH của bạn
RyanHennig
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.