Rake 0.9.0을 사용하는 정의되지 않은 메소드 'task'


132

방금 Rake 를 최신 버전 ( 0.9.0.beta.4)으로 업데이트 했으며 rake명령이 다음 오류 메시지로 끝납니다.

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

추적은 다음과 같습니다.

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

누구도 같은 문제가 발생 했습니까? 무엇이 잘못 될 수 있습니까? 내가 실행 중 Rails 3.0.3입니다. Gemfile의 내용에 관심이있을 수도 있습니다.

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"

이 문제를 어떻게 해결할 수 있습니까?


7
rake-0.0.9 (릴리스)에도 문제가 있다고 생각합니다.
Kedar Mhaswade

4
레이크 버전 0.9.0을 의미합니다. 그러나, 그것은 깨졌습니다.
Rob

이것이 내가하고있는 일이 나이 특정 버전의 갈퀴에 문제가 있습니까? 감사합니다, N
ifightcrime

방금이 문제를 발견하고 그것을 알아 내려고 노력했습니다
Muhammad Usman

답변:


119

0.9.0.beta.4 버전의 Rake를 실행할 때도 같은 예외가있었습니다. 새 항목 Rake::DSL이 제대로로드되지 않은 것 같습니다 .

그래서 Rakefile에 다음 코드를 추가했습니다.

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

그렇게하면 Rake 작업을 다시 실행할 수있었습니다.

나는 이것이 우아한 해결책이 아니라는 것을 안다. 그러나 --preRake 버전을 사용해야하는 경우이 빠른 해킹을 사용하는 것이 좋습니다.


팁 주셔서 감사합니다 mordaroso!
Amokrane Chentir

14
"module :: Anelis"줄을 rails 앱의 이름과 일치하는 것으로 변경하십시오. IE "module :: Myapp"그렇게하는 것을 잊어 버렸습니다.이 솔루션은 실수를 깨달을 때까지 작동하지 않았습니다.
Scott Swezey

1
팁을 주셔서 감사합니다. Anelis를 앱 이름으로 변경하고 YourAppName :: Application.load_tasks 행 앞에 해당 매직 코드를 추가하십시오. 그렇지 않으면 오류가 계속 발생합니다.
Giang Nguyen

10
그리고 반드시 사이에이를 넣어 만든다 require 'rake'MyApp::Application.load_tasks
Jits

이것이 0.9.0 정식 버전으로 유지 된 것 같습니다. 레일 및 / 또는 레이크에 고정 될 때까지 Gemfile.lock에서 레이크를 0.8.7로 되돌 렸습니다. Andrei의 아래 답변은 이것을 제안하는 것 같습니다.
sj26

158

mordaroso의 답변 에서 설명했듯이 Rake 0.9.0에는 문제가 있습니다. 레이크를 피하기 위해 레이크를 일시적으로 다운 그레이드해야합니다.

  1. 실행 : gem uninstall rake -v 0.9( sudo를 사용하지 않는 한 추가 rvm)

  2. Gemfile에 추가하십시오 : gem 'rake', '~> 0.8.7'

  3. 그런 다음 다음을 실행하십시오. bundle update

첫 번째 단계를 건너 뛸 수 있지만 예 를 들어을 rake사용하여 실행해야합니다 bundle exec.

bundle exec rake db:migrate

그렇지 않으면 다음과 같은 오류가 발생합니다.

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

최신 정보

Alex Chaffee가 Pablo Cantero의 답변 에 대한 의견에서 알 수 있듯이 여전히 문제가 발생하면 Rake를 제거하려면 다음을 수행해야 할 수도 있습니다

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

또한 Duke의 답변 에서 제안 된 솔루션을 사용해보십시오 .


2
이것이 가장 "해키"한 해결책이라고 생각합니다. bundle exec rake작동하는 번들 버전을 사용하려면 레이크를 실행해야 할 수도 있습니다 .
스튜어트 K

2
@Stuart K bundle exec rake는 rake-0.9를 제거하지 않은 경우에만 필요합니다. 이 경우 오류 메시지가 나타납니다rake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei

1
이 문제는 Rails 3.0.7에서 Rake> = 0.8.7을 요구하는 Railties gem과 함께 존재하며 0.9를 사용할 수 있습니다.
Matthew Savage

3
더 적은 해키 사용하는 것입니다 :gem 'rake', '~> 0.8.7'
파 비우 바티스타

"Gemfile에 추가"란 정확히 무엇을 의미합니까? 이 Gemfile은 어디에 있습니까? 죄송합니다, n00b 질문
Adnan

40

참고 : 이것은 Rails 3.0.8에서 수정되었습니다.

새로운 버전의 Rake는 DSL 명령 (작업, 파일, 디스크, 가져 오기 등)을 더 이상 Object 네임 스페이스의 루트에 넣지 않습니다 (Object에 배치하면 모든 개체에 작업 명령이 있다는 의미는 아닙니다). 명령은 명령이 Rake::DSL module필요한 모든 모듈 에 혼합하여 사용할 수 있습니다 .

Ruby on Rails가 Rake 0.9.x와 함께 작동하도록 업데이트 될 때까지 "rake 필요"후 및 호출 전에 프로젝트 Rakefile에 다음을 입력하십시오 Application.load_tasks.

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

레일스 3.0.7을 사용하고 있으며 레이크가 0.9.0으로 업데이트되었지만 기본적으로 Gemfile.lock에서는 0.8.7이므로 0.9.0으로 업데이트하면 훌륭한 듀크 듀크
Jagdish Barabari

16

이 같은 오류에 대해 rails_admin에 대한 문제를 만들었습니다.

:

이것은 일반적인 Rails 문제입니다 : http://twitter.com/dhh/status/71966528744071169

곧 수정 될 3.0.8 릴리스가 있어야합니다. 그 동안 Gemfile에 다음 줄을 추가 할 수 있습니다.

보석 '갈퀴', '~> 0.8.7'

Rake (0.9.0)의 문제이며 DHH가 Twitter 에서 발표 했습니다.

어제 릴리스 된 Rake 0.9는 Rails (및 기타)를 중단했습니다. 수정을 기다리는 동안 Gemfile에 gem 'rake', '0.8.7'이 필요합니다.


2
PATH에 여전히 0.9.0의 / bin 디렉토리가있는 경우에는 충분하지 않을 수 있습니다. 실제로 레이크를 제거하려면해야합니다 gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(두 번째 설치는 실행 파일을 다시 가져 오는 것입니다).
AlexChaffee

1
그리고 만약 레이크 0.9.0이 당신의 rvm 글로벌 젬셋을 가지고 있다면, 당신은해야합니다rvm 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

rvm을 사용하지만 제거해도 도움이되지 않습니다. 그래서 .rvm/gems/ruby@global디렉토리 에서 0.9 파일을 모두 수동으로 제거하면 모든 것이 이전과 같이됩니다!


0

Rake 0.9.x를 제거 할 필요없이

보석 '갈퀴', '~> 0.8.7'

Gemfile에 입력하고 입력하십시오.

번들 실행 레이크 -T


0.9.1에서 문제가 해결되었으므로 0.8.7로 다운 그레이드하는 대신 해당 버전을 사용할 수 있습니다.
Amokrane Chentir
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.