Rake DSL yöntemlerine küresel erişim kullanımdan kaldırıldı


86

Ruby on Rails 3 eğitim kitabı üzerinde çalışıyorum ve komut satırına şunu yazdım:

rake db:migrate

aşağıdaki uyarıya neden olan.

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

Bu konuda ne yapacağımı veya onunla nasıl çalışacağımı bilmiyorum. Rake için başka bir komut bilmiyorum.

Bu sorunu nasıl çözebilirim?

Yanıtlar:


64

Bunu Stack Overflow sorusunda Ruby on Rails ve Rake problemlerinde buldum : başlatılmamış sabit Rake :: DSL . @DHH tweetini ifade eder.

Aşağıdakileri Gemfile'ınıza koyun

gem "rake", "0.8.7"

Gibi bir şey görebilirsiniz

rake aborted!
You have already activated Rake 0.9.1 ...

Dizinimde hala bir Rake 0.9.1 kopyası vardı, bu yüzden onu sildim.

Aşağıdaki komutu çalıştırarak Rake 0.9.1'i "silebilirsiniz":

gem uninstall rake -v=0.9.1

Gem'in birden fazla sürümü yüklüyse, bir sürüm seçmeniz istenir.

0.9.1 temizlendikten sonra koştum

bundle update rake

ve nihayet veritabanı dosyalarımı oluşturabildim. Kullanıyordum rake db:createama işe rake db:migrateyaramalı.

Umut ediyorum bu yardım eder.


5
Bu benim için işe yaramadı. Aslında rake 0.9.1'i kaldırmak zorunda kaldım> gem uninstall rake -v = 0.9.1 ve ardından> paket güncellemesi Teşekkürler Antonio

1
Antonio'ya katılıyorum - komisyonu kaldırmamı söylediğimde 0.9.1 kullanmakla demek istedim gem uninstall rake -v=0.9.1. Açıklığa kavuşturmamak benim hatam. Açıklama için teşekkürler Antonio! Şerefe, Brian
Brian Bruijn

13
Daha yenisi çalıştırıldığında eski kütüphaneleri kasıtlı olarak kullanmanın iyi olacağını sanmıyorum, aşağıdaki yorumu görüyorum.
Smar

2
Daha basit çözüm, aşağıda NPatel tarafından önerilen çözümdür. Rakefile'a bir satır eklemeniz yeterlidir.
Slobodan Kovacevic

Bu kararla hiç şansım olmadı. Rake 0.9.1 veya 0.9.2'yi kaldırdıktan sonra paket güncellemesini çalıştırdıktan sonra hala aynı hatayla geldi.
Marc

111

include Rake::DSLUygulamalar load_tasks çağrılmadan önce Rakefile'a eklemek de benim için çalıştı.

Yani yukarıdaki kullanıcının durumunda DemoApp::Application.load_tasksRakefile'da önce .


Teşekkürler. "UYARI: Rake DSL yöntemlerine küresel erişim kullanımdan kaldırıldı." sorun.
Slobodan Kovacevic

Bu sorunu çözmenin uygun yolu bu mu?
Marc

2
@Marc, şu anda bu, 3.0.8 veya daha yüksek raylara yükseltme yapmadan bildiğim tek düzeltme. Bu sorun, söz konusu sürümde çözülmüştür: github.com/rails/rails/commit/… . Daha iyi bir çözüm bulursanız lütfen bana bildirin. Ayrıca uyarıya göre bunun doğru bir düzeltme olduğunu düşünürdüm.
Patelify

1
Bu benim kullandığım çözüm. Rake'in hangi sürümünün neyle çalıştığı ile oyun oynamaktansa, sadece satırı eklemeyi tercih ederim.
jaydel

2
Bu benim için 1.9.2 ve Rails 3.0.7 ile Rake 0.9.2 ile çalıştı
Steven Chanin

5

Windows'ta da yükleyiciyle aynı sorunu yaşıyordum. Ruby 1.9.2 ve Rails 3.0.9. İşte yaptığım şey:

bundle update rake
bundle show rake

Bunu yaptıktan sonra 0.9.2 rake koşuyordum.

Ardından uygulama kök klasöründeki Rakefile'ı şu şekilde güncelledim:

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

Yorumda belirtildiği gibi, uygulamanızın adının yukarıdaki iki uygun satırda doğru olduğundan emin olun.


1
Ve almak için heroku rake db:migrateişe komutu, ben de eklemek zorunda require 'rake/dsl_definition'( 'tırmık' hattını gerektirir üstünde) rakefile için.
LikeMaBell

Bunların hepsini yapmak benim için işe yarıyor, ancak gerekli değil. NPatel'in önerisi bunu iyi karşıladı.
Scott Swezey

0

Bunu Rails'in sonraki sürümlerinde (3. + gibi) görüyorsanız, RVM http://beginrescueend.com/ kullanarak ve projeleriniz için belirli bir ruby ​​& gemset oluşturarak ortamınızın temiz olduğunu doğrulamak isteyebilirsiniz .

Proje bazında bir .rvmrc dosyası kullanın, bu, projelerinize eski sistem mücevherlerini almamanızı garanti eder. Beni daha önce ısırdı.

Bu, oluşturulan Rakefiles vb. İle etrafta gezinme zorunluluğunu önler.


0

bundle exec rake db: migrate, ruby ​​sürümü sorunlarınızı çözecek


Bu yalnızca Gemfile'ınızda çalışan bir rake sürümünüz varsa ve "rake" yazmanız PATH
RyanHennig
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.