วิธีการที่ไม่ได้กำหนด 'งาน' โดยใช้ Rake 0.9.0


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 (release) เช่นกัน
Kedar Mhaswade

4
คุณหมายถึงคราดเวอร์ชัน 0.9.0 แต่ใช่มันพัง
Rob

นี่เป็นปัญหากับสิ่งที่ฉันกำลังทำอยู่หรือมีปัญหากับคราดรุ่นนี้โดยเฉพาะหรือไม่? ขอบคุณ N
ifightcrime

เพิ่งเจอปัญหานี้เช่นกันพยายามคิดออก
มูฮัมหมัดอุษมาน

คำตอบ:


119

ฉันมีข้อยกเว้นเดียวกันเมื่อเรียกใช้ Rake เวอร์ชัน 0.9.0.beta.4 ดูเหมือนว่า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" เป็นอะไรก็ตามที่ตรงกับชื่อแอปรางของคุณ .. IE "module :: Myapp" ฉันลืมทำไปและวิธีนี้ใช้ไม่ได้จนกว่าฉันจะตระหนักถึงความผิดพลาด
Scott Swezey

1
ขอบคุณ mordaroso สำหรับคำแนะนำ เปลี่ยน Anelis เป็นชื่อแอปของคุณและเพิ่มรหัสวิเศษเหล่านั้นก่อนบรรทัด YourAppName :: Application.load_tasks มิฉะนั้นข้อผิดพลาดจะยังคงเกิดขึ้น
Giang Nguyen

10
และตรวจสอบให้แน่ใจว่าคุณใส่ไว้ระหว่างrequire 'rake'ถึงMyApp::Application.load_tasks
Jits

ดูเหมือนว่าสิ่งนี้จะยังคงอยู่ในเวอร์ชันเต็ม 0.9.0 ฉันดึงคราดกลับไปที่ 0.8.7 ใน Gemfile.lock ของฉันจนกว่าจะได้รับการแก้ไขในรางและ / หรือคราด คำตอบด้านล่างของ Andrei ดูเหมือนจะแนะนำสิ่งนี้
sj26

158

ตามที่อธิบายไว้ในคำตอบของ mordarosoมีปัญหาใน Rake 0.9.0 คุณต้องดาวน์เกรด Rake ชั่วคราวเพื่อหลีกเลี่ยง:

  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เพื่อใช้เวอร์ชันบันเดิลที่ใช้งานได้
Stuart 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 โดยอัญมณี Railties ต้องการ Rake> = 0.8.7 ซึ่งดึง 0.9 ตามที่มีอยู่ ...
Matthew Savage

3
แม้แต่แฮ็คก็ใช้น้อยลง:gem 'rake', '~> 0.8.7'
Fábio Batista

โดย "เพิ่มลงใน Gemfile" หมายความว่าอย่างไร Gemfile นี้อยู่ที่ไหน? ขออภัยคำถาม n00b
Adnan

40

หมายเหตุ: สิ่งนี้ได้รับการแก้ไขแล้วใน Rails 3.0.8

Rake เวอร์ชันใหม่ไม่ได้ใส่คำสั่ง DSL (งานไฟล์ desc การนำเข้า ฯลฯ ) ในรูทของเนมสเปซอ็อบเจ็กต์อีกต่อไป (วางไว้ใน Object หมายความว่าอ็อบเจ็กต์ทุกตัวมีคำสั่งงานซึ่งไม่ค่อยดีนัก DSL คำสั่งสามารถใช้ได้โดยการผสมในRake::DSL moduleโมดูลใด ๆ ที่ต้องการคำสั่ง

จนกว่า Ruby on Rails จะได้รับการอัปเดตให้ทำงานกับ Rake 0.9.x ให้ใส่สิ่งต่อไปนี้ใน Rakefile โปรเจ็กต์ของคุณหลังจาก "ต้องใช้คราด" และก่อนที่จะเรียกไปที่Application.load_tasks:

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

กำลังใช้ Rails 3.0.7 โดยมีการอัปเดตคราดเป็น 0.9.0 แต่โดยค่าเริ่มต้นใน Gemfile.lock จะเป็น 0.8.7 ดังนั้นหากเราอัปเดตเป็น 0.9.0 จะใช้งานได้ดี thanx Duke
Jagdish Barabari

16

ฉันได้สร้างปัญหาให้กับ rail_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 (และอื่น ๆ ) ในขณะที่เรารอการแก้ไขคุณจะต้องการอัญมณี 'คราด', '0.8.7' ใน Gemfile ของคุณ


2
สิ่งนี้อาจไม่เพียงพอหาก PATH ของคุณยังมีไดเร็กทอรี rake 0.9.0's / bin อยู่ ในการถอนการติดตั้งคราดจริงๆคุณต้องทำgem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(การติดตั้งครั้งที่สองคือการเรียกใช้งานกลับมา)
AlexChaffee

1
และถ้า rake 0.9.0 ติดตั้ง rvm global gemset ของคุณคุณต้องทำ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 แต่การถอนการติดตั้งไม่ได้ช่วยฉัน ดังนั้นฉันจึงลบไฟล์ 0.9 ทั้งหมดออกจาก.rvm/gems/ruby@globalไดเร็กทอรีด้วยตนเองและทุกอย่างก็เหมือนเดิม!


0

โดยไม่จำเป็นต้องถอนการติดตั้ง Rake 0.9.x ให้เพิ่ม

อัญมณี 'คราด', '~> 0.8.7'

ไปที่ Gemfile ของคุณแล้วพิมพ์

บันเดิล exec rake -T


โปรดทราบว่า 0.9.1 ได้แก้ไขปัญหาแล้วดังนั้นคุณสามารถใช้เวอร์ชันนั้นแทนการดาวน์เกรดเป็น 0.8.7
Amokrane Chentir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.