Rake 0.9.0 kullanan tanımlanmamış yöntem 'görev'


132

Rake'i en son sürüme ( 0.9.0.beta.4) güncelledim ve rakekomut aşağıdaki hata mesajıyla sona eriyor:

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

İşte iz:

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

Aynı sorunu yaşayan var mı? Ne yanlış olabilir ki? Ben koşuyorum unutmayın Rails 3.0.3, ayrıca benim Gemfile içeriği ilginizi çekebilir:

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"

Bu sorunu nasıl çözebilirim?


7
Sorunun rake-0.0.9'da (yayınlandı) da var olduğunu düşünüyorum.
Kedar Mhaswade

4
rake, sürüm 0.9.0 demek istiyorsun. ama evet, bozuk.
Rob,

bu, yaptığım bir şeyle ilgili bir sorun mu yoksa tırmığın bu belirli sürümüyle ilgili bir sorun mu? Teşekkürler, N
ifightcrime

bu konuyla da şimdi karşılaştım, anlamaya çalışıyorum
Muhammed Usman

Yanıtlar:


119

Rake'in 0.9.0.beta.4 sürümünü çalıştırırken de aynı istisnaya sahiptim. Görünüşe göre yeni Rake::DSLdüzgün yüklenmemiş.

Bu yüzden Rakefile'ıma aşağıdaki kodu ekledim:

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

Bu şekilde Rake görevlerimi yeniden çalıştırabildim.

Bunun zarif bir çözüm olmadığını biliyorum. Ancak --preRake sürümünü kullanmanız gerekiyorsa, bu hızlı hack'i kullanmanız uygun olabilir.


Bahşiş için teşekkürler mordaroso!
Amokrane Chentir

14
Ray uygulamanızın adıyla eşleşen "module :: Anelis" satırını değiştirdiğinizden emin olun .. IE "module :: Myapp" Bunu yapmayı unuttum ve bu çözüm hatamı fark edene kadar işe yaramadı.
Scott Swezey

1
İpuçları için teşekkürler mordaroso. Anelis'i uygulamanızın adıyla değiştirin ve bu sihirli kodu YourAppName :: Application.load_tasks satırının önüne ekleyin, aksi takdirde hata devam eder
Giang Nguyen

10
Ve emin arasına koymak yapmak require 'rake'veMyApp::Application.load_tasks
Jits

Görünüşe göre bu, 0.9.0 tam sürümde devam etti. Raylarda ve / veya tırmıkta sabitlenene kadar Gemfile.lock'umda rake'yi 0.8.7'ye geri çektim. Andrei'nin aşağıdaki cevabı bunu öneriyor gibi görünüyor.
sj26

158

Mordaroso'nun cevabında açıklandığı gibi , Rake 0.9.0'da bir problem var. Bunu önlemek için geçici olarak Rake'i düşürmeniz gerekir:

  1. run: gem uninstall rake -v 0.9( sudokullanmadığınız sürece ekleyin rvm)

  2. Gemfile'ınıza ekleyin: gem 'rake', '~> 0.8.7'

  3. ve sonra çalıştırın: bundle update

İlk adımı atlayabilirsiniz, ancak daha sonra şunu rakekullanarak çalıştırmanız gerekir bundle exec, örneğin:

bundle exec rake db:migrate

Aksi takdirde aşağıdaki hatayı alırsınız.

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

Güncelleme

Alex Chaffee'nin Pablo Cantero'nun cevabına yaptığı bir yorumda fark ettiği gibi , sorunu hala görüyorsanız Rake'i kaldırmak için aşağıdakileri yapmanız gerekebilir.

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

Ayrıca Duke'un cevabında önerilen çözümü deneyin .


2
Bunun en az "hacky" çözüm olduğunu düşünüyorum. bundle exec rakeÇalışan paket sürümü kullanmak için komisyonu çalıştırmanız gerekebilir .
Stuart K

2
@Stuart K, bundle exec rakeyalnızca rake-0.9 kaldırılmadıysa gereklidir. Bu durumda hata mesajı rake aborted! You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.
Andrei

1
Bu sorun aynı zamanda Rails 3.0.7 ile de mevcuttur, Railties cevheri Rake> = 0.8.7 gerektirir ve mevcut olarak 0.9 çeker ...
Matthew Savage,

3
Daha da az hacky kullanmak için:gem 'rake', '~> 0.8.7'
Fábio Batista

"Gemfile'ınıza ekle" ile tam olarak ne demek istiyorsunuz? Bu Gemfile nerede? Pardon, n00b soru
Adnan

40

Not: Bu, yalnızca Rails 3.0.8'de düzeltilmiştir.

Rake'in yeni sürümü artık DSL komutlarını (görev, dosya, tanım, içe aktarma, vb.) Nesne ad alanının köküne koymuyor (bunları Object'e yerleştirmek her nesnenin bir görev komutu olduğu anlamına geliyor, çok hoş değil. DSL. komutlar Rake::DSL module, komutlara ihtiyaç duyan herhangi bir modüle karıştırılarak kullanılabilir .

Ruby on Rails, Rake 0.9.x ile çalışacak şekilde güncellenene kadar, Rakefile projenizde "gerekli rake" den sonra ve şu çağrıdan önce şunları koyun Application.load_tasks:

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

Rails 3.0.7 kullanıyorum, komisyon 0.9.0'a güncellendi, ancak varsayılan olarak Gemfile.lock'ta 0.8.7, bu yüzden 0.9.0'a güncellediğimizde iyi çalışıyor Duke
Jagdish Barabari

16

Aynı hatayla ilgili rails_admin için bir sorun oluşturdum.

Cevap :

Bu genel bir Rails sorunudur: http://twitter.com/dhh/status/71966528744071169

Yakında onu düzelten bir 3.0.8 sürümü olacaktır. Bu arada, Gemfile'ınıza aşağıdaki satırı ekleyebilirsiniz:

mücevher 'tırmık', '~> 0.8.7'

Rake'de (0.9.0) bir sorun, DHH tarafından Twitter'da duyuruldu .

Dün piyasaya sürülen Rake 0.9, Rails'i (ve diğerlerini) kırdı. Biz bir düzeltme beklerken, Gemfile'ınızda mücevher 'tırmık', '0.8.7' isteyeceksiniz.


2
PATH'inizde hala 0.9.0's / bin dizini varsa, bu yeterli olmayabilir. Rake'i gerçekten kaldırmak için yapmanız gerekir gem uninstall rake --version 0.9.0 && gem install rake --version 0.8.7(ikinci kurulum yürütülebilir dosyayı geri almaktır).
AlexChaffee 26:11

1
Ve rake 0.9.0 rvm global mücevher setinize girdiyse, yapmanız gerekenrvm 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 kullanıyorum, ancak kaldırma işlemi bana yardımcı olmuyor. Bu yüzden tüm 0.9 dosyalarını dizinden manuel olarak kaldırıyorum .rvm/gems/ruby@globalve her şey eskisi gibi oluyor!


0

Rake 0.9.x'i kaldırmaya gerek kalmadan ekleyin

mücevher 'tırmık', '~> 0.8.7'

Gemfile'ınıza yazın ve sadece yazın

bundle exec rake -T


0.9.1'in sorunu çözdüğünü unutmayın, böylece 0.8.7'ye düşürmek yerine bu sürümü kullanabilirsiniz.
Amokrane Chentir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.