अपरिभाषित विधि ef टास्क ’रेक का उपयोग 0.9.0


132

मैंने केवल नवीनतम संस्करण के लिए रेक को अपडेट किया ( 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, आप मेरी जेमफाइल की सामग्री में भी रुचि ले सकते हैं:

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
मुझे लगता है कि समस्या रेक-0.0.9 (जारी) के साथ भी मौजूद है।
केदार म्हसवडे

4
आपका मतलब है रेक, संस्करण 0.9.0। लेकिन, हाँ, यह टूट गया है।
रोब

तो यह मैं कुछ कर रहा हूँ या रेक के इस विशेष संस्करण के साथ एक समस्या है? धन्यवाद, N
ifightcrime

बस इस मुद्दे पर भी आया, यह पता लगाने की कोशिश कर रहा है
मुहम्मद उस्मान

जवाबों:


119

रेक के 0.9.0.beta.4 संस्करण को चलाते समय मेरे पास एक ही अपवाद था। ऐसा लगता है कि नया Rake::DSLठीक से लोड नहीं किया गया है।

इसलिए मैंने अपने राॅकफाइल में निम्नलिखित कोड जोड़ा:

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

इस तरह मैं अपने रेक कार्यों को फिर से चला पा रहा था।

मुझे पता है कि यह एक सुरुचिपूर्ण समाधान नहीं है। लेकिन अगर आपको --preरेक के संस्करण का उपयोग करना है, तो इस त्वरित हैक का उपयोग करने के लिए सब ठीक हो सकता है।


धन्यवाद mordaroso टिप के लिए!
एमोकेरेन चेंटिर

14
सुनिश्चित करें कि आप जो कुछ भी अपने रेल एप्लिकेशन के नाम से मेल खाते हैं, उसके लिए "मॉड्यूल :: एनेलिस" लाइन को बदल दें .. IE "मॉड्यूल :: Myapp" मैं ऐसा करना भूल गया, और जब तक मुझे अपनी गलती का एहसास नहीं हुआ यह समाधान काम नहीं किया।
स्कॉट स्वीज़ी

1
सुझाव के लिए धन्यवाद mordaroso। Anelis को अपने ऐप के नाम में बदलें और लाइन से पहले उन मैजिक कोड को जोड़ें YourAppName :: Application.load_tasks अन्यथा त्रुटि अभी भी होती है
Giang Nguyen

10
और सुनिश्चित करें कि आप इस के बीच में डाल दिया require 'rake'औरMyApp::Application.load_tasks
Jits

ऐसा लगता है कि यह 0.9.0 पूर्ण रिलीज में बनी रही है। मैंने अपने Gemfile.lock में 0.8.7 पर रेक वापस खींच लिया है, जब तक कि यह रेल और / या रेक में तय नहीं हो जाता। आंद्रेई द्वारा नीचे दिए गए जवाब से ऐसा लगता है।
sj26

158

जैसा कि मोर्डारो के उत्तर में बताया गया है , रेक 0.9.0 में एक समस्या है। इससे बचने के लिए आपको अस्थायी रूप से रेक को डाउनग्रेड करना होगा:

  1. चलाएँ: gem uninstall rake -v 0.9( sudoजब तक आप उपयोग न करें rvm) जोड़ें

  2. अपने जेफाइल में जोड़ें: 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.

अपडेट करें

जैसा कि एलेक्स शैफ़ी ने पाब्लो कैंटरो के जवाब के लिए एक टिप्पणी में देखा , कि यदि आप अभी भी समस्या देखते हैं, तो आपको रेक को अनइंस्टॉल करने के लिए निम्न करने की आवश्यकता हो सकती है

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

ड्यूक के उत्तर में सुझाए गए समाधान का भी प्रयास करें ।


2
मुझे लगता है कि यह सबसे कम "हैकी" समाधान है। bundle exec rakeकाम कर रहे बंडल संस्करण का उपयोग करने के लिए आपको रेक चलाने की आवश्यकता हो सकती है ।
स्टुअर्ट के

2
@ स्टुअर्ट के, bundle exec 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.
आंद्रेई

1
यह समस्या भी रेल 3.0.7 के साथ मौजूद है, Railties मणि की आवश्यकता होती है रैक> = 0.8.7, जो 0.9 इसकी उपलब्ध रूप में खींचती ... के साथ
मैथ्यू सैवेज

3
इससे भी कम हैक करने के लिए उपयोग करना है:gem 'rake', '~> 0.8.7'
फैबियो बतिस्ता

"अपने जेम्फाइल में जोड़ें" से, वास्तव में आपका क्या मतलब है? यह रत्न कहाँ है? क्षमा करें, n00b प्रश्न
अदनान

40

नोट: यह केवल रेल 3.0.8 में तय किया गया था

रेक के नए संस्करण में ऑब्जेक्ट के नामस्थान की जड़ में अपने डीएसएल कमांड (कार्य, फ़ाइल, डीएससी, आयात, आदि) को नहीं रखा गया है (उन्हें ऑब्जेक्ट में रखने का मतलब है कि प्रत्येक ऑब्जेक्ट में एक कार्य कमांड है, बहुत अच्छा नहीं है। डीएसएल) कमांड्स Rake::DSL moduleको किसी भी मॉड्यूल में कमांड की जरूरत होती है।

जब तक रूबी ऑन रेल्स को रेक 0.9.x के साथ काम करने के लिए अपडेट नहीं किया जाता है, तब तक अपने प्रोजेक्ट 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 में अपडेट किया गया तो यह ठीक है, जो
थैंक्स

16

मैंने इसी त्रुटि के बारे में rails_admin के लिए एक समस्या बनाई है।

उत्तर :

यह एक सामान्य रेल समस्या है: http://twitter.com/dhh/status/71966528744071169

जल्द ही 3.0.8 रिलीज होना चाहिए जो इसे ठीक करता है। इस समय के दौरान, आप अपने Gemfile में निम्न पंक्ति जोड़ सकते हैं:

मणि 'रेक', '~> 0.8.7'

यह रेक (0.9.0) में एक समस्या है, इसकी घोषणा डीएचएच ने ट्विटर पर की।

रेक 0.9, जिसे कल जारी किया गया था, ने रेल (और अन्य) को तोड़ दिया। जब हम एक ठीक होने की प्रतीक्षा करते हैं, तो आप अपने रत्न में मणि 'रेक', '0.8.7' चाहते हैं।


2
यह पर्याप्त नहीं हो सकता है, अगर आपके पेट में अभी भी उस पर 0.9.0 / बिन निर्देशिका है। रेक को वास्तव में अनइंस्टॉल करने के लिए, आपको करना होगा gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(दूसरा इंस्टॉल निष्पादन योग्य वापस प्राप्त करना है)।
एलेक्सचैफी

1
और अगर रेक 0.9.0 में आपका आरवीएम ग्लोबल रत्न शामिल हो गया है, तो आपको करना होगा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
एलेक्सचैफी



2

मैं rvm का उपयोग करता हूं, लेकिन स्थापना रद्द करने से मुझे मदद नहीं मिलती है। इसलिए मैं मैन्युअल रूप से .rvm/gems/ruby@globalनिर्देशिका से सभी 0.9 फ़ाइलों को हटा देता हूं और सब कुछ पहले जैसा हो जाता है!


0

Rake 0.9.x को अनइंस्टॉल करने की आवश्यकता के बिना, जोड़ें

मणि 'रेक', '~> 0.8.7'

अपने Gemfile और बस प्रकार के लिए

बंडल निष्पादन रेक-टी


ध्यान दें कि 0.9.1 ने समस्या को ठीक कर दिया है, इसलिए आप 0.8.7 पर डाउनग्रेड करने के बजाय उस संस्करण का उपयोग कर सकते हैं।
अमोकेरेन चेंटिर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.