Phương thức 'nhiệm vụ' không xác định bằng Rake 0.9.0


132

Tôi vừa cập nhật Rake lên phiên bản mới nhất ( 0.9.0.beta.4) và rakelệnh kết thúc với thông báo lỗi sau:

rake aborted!
undefined method `task' for #<Anelis::Application:0x9223b6c>

Đây là dấu vết:

undefined method `task' for #<Anelis::Application:0x97ef80c>
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:214:in `initialize_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'
/home/amokrane/Documents/prog/web/learning_rails/anelis/Rakefile:7:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `eval'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `load_string'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:16:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:495:in `raw_load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:78:in `block in load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:77:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:61:in `block in run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:59:in `run'
/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/bin/rake:31:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `<main>'

Bất cứ ai cũng có vấn đề tương tự? Điêu tôi tệ gi co thể xảy ra? Lưu ý rằng tôi đang chạy Rails 3.0.3, bạn cũng có thể quan tâm đến nội dung của Gemfile của tôi:

source 'http://rubygems.org'
gem 'rails', '3.0.3'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'mysql2'
gem 'legacy_data'
gem 'resources_controller', :git => 'git://github.com/ianwhite/resources_controller'
gem 'will_paginate', '3.0.pre' # pagination
gem 'jquery-rails', '>= 0.2.6'
gem "rmagick" # sudo aptitude install libmagick9-dev
gem "paperclip", "~> 2.3"
gem "nested_form", :git => "git://github.com/madebydna/nested_form.git"
gem "meta_search"
gem "hirb"
gem "devise"
gem "rails_admin", :git => "git://github.com/sferik/rails_admin.git"

Làm thế nào tôi có thể khắc phục vấn đề này?


7
Tôi nghĩ rằng vấn đề tồn tại với rake-0.0.9 (phát hành) là tốt.
Kedar Mhaswade

4
ý bạn là cào, phiên bản 0.9.0. Nhưng, vâng, nó bị hỏng.
Cướp

Vì vậy, đây là một vấn đề với một cái gì đó tôi đang làm hoặc một vấn đề với phiên bản cào cụ thể này? Cảm ơn, N
ifightcrime

cũng vừa gặp vấn đề này, cố gắng tìm ra nó
Muhammad Usman

Câu trả lời:


119

Tôi đã có ngoại lệ tương tự khi chạy phiên bản 0.9.0.beta.4 của Rake. Có vẻ như cái mới Rake::DSLkhông được tải đúng cách.

Vì vậy, tôi đã thêm mã sau vào Rakefile của mình:

require 'rake'

# Rake Fix Code start
# NOTE: change 'Anelis' to your app's module name (see config/application.rb)
module ::Anelis
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end
# Rake Fix Code end

MyApp::Application.load_tasks

Bằng cách đó tôi đã có thể chạy các nhiệm vụ Rake của mình một lần nữa.

Tôi biết rằng đây không phải là một giải pháp thanh lịch. Nhưng nếu bạn phải sử dụng --prephiên bản Rake thì có thể sử dụng bản hack nhanh này.


Cảm ơn mordaroso cho tiền boa!
Amokrane Chentir

14
Hãy chắc chắn rằng bạn thay đổi dòng "module :: Anelis" thành bất cứ thứ gì khớp với tên của ứng dụng rails của bạn .. IE "module :: Myapp" Tôi quên làm điều đó và giải pháp này không hoạt động cho đến khi tôi nhận ra sai lầm của mình.
Scott Swezey

1
Cảm ơn mordaroso cho lời khuyên. Thay đổi Anelis thành tên ứng dụng của bạn và thêm các mã ma thuật đó trước dòng YourAppName :: Application.load_t task nếu không thì lỗi vẫn xảy ra
Giang Nguyen

10
Và hãy chắc chắn rằng bạn đặt cái này vào giữa require 'rake'MyApp::Application.load_tasks
Jits

Có vẻ như điều này đã tồn tại trong bản phát hành đầy đủ 0.9.0. Tôi đã kéo cào về 0,8,7 trong Gemfile.lock cho đến khi điều này được cố định trong đường ray và / hoặc cào. Câu trả lời dưới đây của Andrei dường như gợi ý điều này.
sj26

158

Như đã giải thích trong câu trả lời của mordaroso , có một vấn đề trong Rake 0.9.0. Bạn cần tạm thời hạ cấp Rake để tránh nó:

  1. chạy: gem uninstall rake -v 0.9(thêm sudotrừ khi bạn sử dụng rvm)

  2. thêm vào Gemfile của bạn: gem 'rake', '~> 0.8.7'

  3. và sau đó chạy: bundle update

Bạn có thể bỏ qua bước đầu tiên, nhưng sau đó bạn phải chạy rakebằng cách sử dụng bundle exec, ví dụ:

bundle exec rake db:migrate

Nếu không, bạn nhận được lỗi sau.

rake aborted!
You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.

Cập nhật

Như Alex Chaffee nhận thấy trong một bình luận cho câu trả lời của Pablo Cantero , rằng bạn có thể cần phải làm như sau để gỡ cài đặt Rake nếu bạn vẫn thấy vấn đề

rvm use @global && gem uninstall rake -v 0.9.0
rvm use @       && gem uninstall rake -v 0.9.0

Cũng thử giải pháp được đề xuất trong câu trả lời của Duke .


2
Tôi nghĩ rằng đây là giải pháp "hacky" ít nhất. Bạn có thể cần chạy cào bundle exec rakeđể sử dụng phiên bản đi kèm.
Stuart K

2
@Stuart K, bundle exec rakechỉ cần thiết nếu rake-0.9 không được gỡ cài đặt. Trong trường hợp này, người ta nhận được thông báo lỗirake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei

1
Vấn đề này cũng tồn tại với Rails 3.0.7, với viên ngọc Railies yêu cầu Rake> = 0.8.7, kéo theo 0.9 như có sẵn ...
Matthew Savage

3
Thậm chí ít hack hơn là sử dụng:gem 'rake', '~> 0.8.7'
Fábio Batista

Bằng cách "thêm vào Gemfile của bạn", chính xác ý bạn là gì? Gemfile này ở đâu? Xin lỗi, câu hỏi n00b
Adnan

40

Lưu ý: Điều này chỉ được sửa trong Rails 3.0.8

Phiên bản mới của Rake không đặt các lệnh DSL của nó (tác vụ, tệp, giải thích, nhập, v.v.) vào thư mục gốc của không gian tên Object nữa (đặt chúng vào Object có nghĩa là mọi đối tượng đều có lệnh tác vụ, không hay lắm. DSL các lệnh có sẵn bằng cách trộn Rake::DSL modulevào bất kỳ mô-đun nào cần các lệnh.

Cho đến khi Ruby on Rails được cập nhật để hoạt động với Rake 0.9.x, hãy đặt phần sau vào dự án Rakefile của bạn sau khi "yêu cầu rake" và trước lệnh gọi tới Application.load_tasks:

class Rails::Application
  include Rake::DSL if defined?(Rake::DSL)
end

Đang sử dụng Rails 3.0.7, với rake được cập nhật lên 0.9.0 nhưng theo mặc định trong Gemfile.lock thì là 0.8.7 vì vậy nếu chúng tôi cập nhật lên 0.9.0 thì nó hoạt động tốt hơn so với Duke
Jagdish Barabari

16

Tôi đã tạo một vấn đề cho rails_admin về lỗi tương tự này.

Câu trả lời :

Đây là sự cố Rails chung: http://twitter.com/dhh/status/71966528744071169

Cần sớm có bản phát hành 3.0.8 để sửa nó. Trong lúc này, bạn có thể thêm dòng sau vào Gemfile của mình:

đá quý 'cào', '~> 0.8.7'

Đó là một vấn đề trong Rake (0.9.0), nó đã được DHH công bố trên Twitter.

Rake 0.9, được phát hành ngày hôm qua, đã phá vỡ Rails (và những người khác). Trong khi chúng tôi chờ khắc phục, bạn sẽ muốn đá quý 'rake', '0.8.7' trong Gemfile của bạn.


2
Điều này có thể không đủ, nếu PATH của bạn vẫn có thư mục rake 0.9.0 '/ bin trên đó. Để thực sự gỡ cài đặt rake, bạn phải làm gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(cài đặt thứ hai là lấy lại tệp thực thi).
AlexChaffee

1
Và nếu rake 0.9.0 có instet rvm đá quý toàn cầu của bạn, bạn phải làmrvm use @global && gem uninstall rake --version 0.9.0 && rvm use @ && gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7
AlexChaffee



2

Tôi sử dụng rvm, nhưng gỡ cài đặt không giúp tôi. Vì vậy, tôi tự xóa tất cả các tệp 0,9 khỏi .rvm/gems/ruby@globalthư mục và mọi thứ trở nên như trước!


0

không cần gỡ cài đặt Rake 0.9.x, thêm

đá quý 'cào', '~> 0.8.7'

vào Gemfile của bạn và chỉ cần gõ

bó thực hiện rake -T


Lưu ý rằng 0.9.1 đã khắc phục sự cố, vì vậy bạn có thể sử dụng phiên bản đó thay vì hạ cấp xuống 0.8.7.
Amokrane Chentir
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.