Ruby on Rails ve Rake problemleri: başlatılmamış sabit Rake :: DSL


189

Gerçekten sinir bozucu bir sorun yaşıyorum: Komisyon aptal olmak.

Sorun şu şekilde ortaya çıkıyor:

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

Her ikisi de gayet iyi çalışıyor, ama sonra bunu yaptığımda,

$ rake db:migrate

Aşağıdaki hatayı alıyorum.

(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'

İnternette benzer / aynı hatalar için baktım ve insanlar bunlara sahipti. Hiç kimse sorunu çözmüyor gibi görünüyor!

Bu sorunu nasıl düzeltirim?

Yanıtlar:


193

Daha önce DHH'den bir tweet . Komisyon .9.0 Rayları ve diğer bazı şeyleri kırıyor, yapmanız gerekenler:

gem "rake", "0.8.7"

Gemfile.


17
Bu benim için çalıştı. bundle update rakeÖnce yapmam gerekiyordu . Sonra kontrol ettim bundle show rake. 0.8.7 diyelim. Sonra rake db:migrate.
B Seven

26
Ya da daha iyisi gem "rake", "!= 0.9.0". Bu, kırık 0.9.0 sürümünü önler, ancak daha taze bir sürüm yayınlandıktan sonra daha yeni sürüme güncellenir (daha sonra kaldırmak zarar vermez, ancak saklamak da zarar görmemelidir).
Spiralis

6
@Spiralis 0.9.2 sürümünde de sorunla karşılaştım. Bu nedenle, bu satırı birkaç sürüm için eklemeniz gerekebilir.
dharmatech

3
bu çözüm benim için çalıştı . @Dharmatech gibi, ben bu sorunu geldi heroku rake db:migrateve bu düzeltmek gibi görünüyordu. devam etmeden önce bu değişiklikleri ekleyip eklemeyi unutmayın;)
pruett

1
Bu Rails için işe yarayabilir, ancak komut satırından çağırdığım sürümün 0.8.7 olmadığından sudo gem install rakeemin olmak zorunda kaldım rake.
Autumnsault

72

Önceki cevabımdan hemen sonra biraz araştırma yaptım (üzgünüm, bundan önce yapmalıyım).

Tüm sorunlar Rake gem 0.9.2 ile çözüldü .. Bu adımları takip ettim:

  • Ben yüklü gem install rake -v=0.9.2(ben 0.9.1 mücevher vardı)
  • ile 0.9.1'i kaldırıldı gem uninstall rake -v=0.9.1
  • ile güncellendi bundle update
  • sonra db:migratebir uyarı gösterdi,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Rake dosyasına aşağıdakiler eklenerek çözüldü.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • Ben ommited module ::RakeFileUtils extend Rake::FileUtilsExtend@databyte tarafından sugested seçeneği.

Komisyon mücevher 0.9.2 iyi çalışıyor demektir!


İlk üç adımı izledim ve geri kalanıyla uğraşmadım hiçbir uyarı aldım, öneri için teşekkürler!
Abe Petrillo

1
Bu bana sormam için yalvarıyor ... Bu özelliği korumak için neden Rake'i hacklemeliyim? Rake ne yapmaya çalışıyor ve şimdi ne kullanmalıyım?
Ryanmt

@Arrumaco, Rake dosyasının dizini nedir?
Ctak

Bu ekin RakeFileönce olmalı require 'rake'- beni yakaladı :)
Ciaran Archer

12
aynı sorun, ama zaten komisyon vardı (0.9.2, 0.8.7). Yine de 0.9.2'yi yeniden yüklemek sorunu çözüyor gibi görünüyor: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.

54

Railstutorial 2. bölümden (demo_app) geçerek bu problemle karşılaştık. Burada listelenen diğer tüm cevapları denedim, ancak bunu yapana kadar işe yaramadı:

Bunu Rakefile'ınıza yukarıdaki 'tırmık' gerektirir:

require 'rake/dsl_definition'

aracılığıyla nasıl Heroku üzerinde başlatılmamış sabit Rake :: DSL sorunu çözmek için?

Ayrıca tüm dosyaları Github ve Heroku'ya tavsiye ettim.


Bu en iyi yanıt gibi görünüyor çünkü 0.9.2'den 0.8.7'ye düşürme, benimki gibi her bir duruma bağlı olarak bazı mücevher bağımlılıklarını kıracaktır :) Teşekkürler!
DiegoSalazar

Benim için işe yaramıyor. Komisyon db yaparken "yüklemek için böyle bir dosya yok - komisyon / dsl_definition" alıyorum: oluşturma
KMC

25

Tek yapmam gereken kullanmaktı:

gem install rake

Zaten 0.9.2 sürümü vardı, sadece yüklemeye ihtiyacım vardı.


vay benim için çalıştı. Ama tırmık yaparken neden tırmık takmam gerektiğini açıklayabilir misiniz?
KMC

Ben gerçekten bir uzman değilim, ama benim anlayış PC'nize 'taşlar' yükleme ve bir mücevher kayıt defterinde 'yükleme' arasında bir fark olduğunu - Ben bunun Ruby kurulum hangi taşlar bilmek gerekiyor çünkü PC'nizde nerede. Belki de bu gelecekte otomatikleştirilebilecek veya belirli Ruby dağıtımlarında otomatik olarak kullanılabilecek bir
şeydir

19

Tırmık mücevher yeniden yükleyin ve gereken cezayı çalışır:

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

Değilse, Gemfile dosyasında '0.8.7' sürümünü belirtin.


Bu yaklaşım benim için çalıştı ve ben sürüm düşürmek zorunda
kalmayı

Benim için de çalıştı, sadece tırmık için -v 0.9.2.2
Haspemulator

10

Bundler kullanılmıyorsa:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Ardından 0.9.0'ı kaldırmayı seçin.


bu benim için paketleyici olmadan sabitledi (raylar 2.3.8). Komisyon 0.9.2'yi yüklemeye çalışmıştı ama bu düzeltmedi. 0.8.7'yi yüklemek ve 0.9.2'yi kaldırmak nihayet benim için işe yaradı.
Michael Durrant

8

Benim gibi 0.8.7 tırmıkla sıkışıp kalıyorsanız ve Rails 3.2.x kullanıyorsanız raylar Rake :: DSL için bir gereklilik ekliyor

Bunu çözmek için, Rakefile'ınızın üstüne şunları eklemelisiniz:

module Rake
  module DSL
  end
end

7

Aynı sorunu aşağıdaki adımlarla çözdüm:

Gemfile'da:

gem 'rake', '0.9.2'

Sonra bunu konsolda çalıştırın:

sudo bundle update rake

Ardından Rakefile'a aşağıdaki satırları ekledik:

require 'rake/dsl_definition'
include Rake::DSL


4

Aynı sorunu vardı ve 0.9.0 yerine 0.8.7 mücevher komisyon kullanmak zorunda kaldı.


4

Windows XP kullanıcısıyım ve aynı sorunu yaşadım.

Gemfile içine gem "rake", "0.8.7" girdim ve komut penceresinden aşağıdakileri yazdım.

bundle update rake

Bu benim sorunumu çözdü.


Bugün itibariyle benim için de çalıştı. Win7'deki rayları kodlamaya çalışıyor.
arscariosus

4
  1. Proje yolunuza gidin
  2. tip bundle install --path=vendor/bundle
  3. tip bundle exec rake db:migrate

Sunucu türünü başlatmak için bundle exec rails s. Paket exec kullanın ve projeniz için doğru taşlar (gerekli sürüm) kullandığınızdan emin olacaksınız. Ayrıca ben eklemenizi öneriyoruz vendor/bundleiçin .gitignorekullanırsanız gitve diğer adını yapmak bundle exec. Eğer kullanırsanız zshtakip edebilirsiniz bu yaklaşımı


3

Yukarıdaki Branstar ile aynı - teşekkürler Branstar!

  • İşletim Sistemi: Windows Vista
  • Seviye: Ruby on Rails'te tamamen yeni
  • Daha önce Ruby 1.9.2 yükledim

Windows'ta Çalışan Raylar 3'teki talimatları izledim .

Hepsi "rake db: migrate" kısmına kadar çalıştı.

Koştum:

gem install rake

Tekrar koştum:

rake db:migrate

Sonra Ruby on Rails sunucusunu başlatabiliyordum ve her şey yerinde kaldı.

Tekrar teşekkürler Branstar :-)


2

Senin için hissediyorum (mikhailvs), bu gerçekten sinir bozucu. Neredeyse bir gündür deliriyorum. Hatta Ruby ve tüm bağımlı dosyalarını kaldırdım ve bilgisayarımı kapattım, ancak yine de aynı sorunu yaşıyorum.

Hata mesajından aldığım komisyon 0.9.2 ile ilgili problem. Tam olarak kurulmamış gibi görünüyor. Bu yüzden yeniden yüklemek zorunda kaldımgem install rake -v=0.9.2

Komisyon –v0.9.1'in yüklü olup olmadığından emin değildim. Güvende olduğumdan emin olmak için eski sürümü kaldırmaya çalıştım gem uninstall rake -v=0.9.1. Ama bana hata mesajını gösterdi

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

Tamam, bu yüzden bilgisayarımdaki tüm Komisyon dizinlerini kontrol ettim ve sadece Komisyon 0.9.2 olduğunu buldum. Sonra her şeyin yolunda gidip gitmediğini kontrol etmek için taşındım rake db:migrate. Ve işe yaradı :)

Rake 0.9.1'e sahip olmadığımı düşünüyorum çünkü Ruby'yi temiz yükledim ( 0.9.1'e rubyinstaller-1.9.2-p180 - Windows 7 sistemime) ve tüm mücevherleri . Bu arada Rake 0.9.2 tam olarak kurulmadı.


2

İle kaldırma "Gem kaldırma komisyon" kaldırma benim için çalıştı, 2 sürümleri yüklü vardı, bu yüzden jest temiz bir yeniden yükleme yaptım.

"rake db: create" , veritabanının var olduğundan emin olmak için ve sonra "rake db: migrate" anlaşmayı mühürlemek için.


2

Komisyon 0.9.2.2'yi kullanırken de aynı sorunu yaşadım. Paket exec kullanarak bu sorunu çözdüm.



0

Komisyon 0.8.7'yi yükleyin ve 0.9.2.2'yi kaldırın

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

Şimdi kullanın

$ bundle exec rake db:migrate

bunun size yardımcı olacağını düşünüyorum;)


0

Çalıştırmak

bundle exec rake db:migrate

benim için çalışıyor.

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.