Masalah Ruby on Rails and Rake: Rake konstan tak diinisialisasi :: DSL

189

Saya mengalami masalah yang sangat membuat frustrasi: Rake menjadi bodoh.

Begini caranya masalah muncul:

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

Keduanya bekerja dengan baik, tetapi ketika saya melakukan ini,

$ rake db:migrate

Saya mendapatkan kesalahan berikut.

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

Saya sudah mencari di Internet untuk kesalahan yang sama / sama, dan orang-orang sudah memilikinya. Sepertinya tidak ada yang bisa menyelesaikan masalah!

Bagaimana saya memperbaiki masalah ini?

HRÓÐÓLFR
sumber

Jawaban:

193

Sebuah tweet dari DHH sebelumnya. Rake .9.0 istirahat Rails dan beberapa hal lainnya, Anda perlu:

gem "rake", "0.8.7"

di Gemfile Anda.

Caley Woods
sumber
17
Ini berhasil untuk saya. Saya perlu lakukan bundle update rakedulu. Lalu aku memeriksanya bundle show rake. Seharusnya mengatakan 0.8.7. Lalu rake db:migrate.
B Seven
26
Atau bahkan lebih baik: gem "rake", "!= 0.9.0". Ini menghindari rilis 0.9.0 yang rusak, tetapi akan memperbarui ke yang lebih baru setelah rilis yang lebih segar diterbitkan (menghapus ini nanti tidak akan sakit, tetapi tetap tidak merusaknya).
Spiralis
6
@Spiralis Saya juga mengalami masalah dengan versi 0.9.2. Jadi, Anda mungkin harus menambahkan baris itu untuk beberapa versi.
dharmatech
3
solusi ini bekerja untuk saya. Seperti @harmatech, saya punya masalah heroku rake db:migrateini dan ini sepertinya memperbaikinya. ingat untuk menambahkan dan melakukan perubahan ini ke git sebelum melanjutkan;)
pruett
1
Ini mungkin berfungsi untuk Rails, tetapi saya juga harus melakukan sudo gem install rakeuntuk memastikan bahwa rakeversi yang saya panggil dari baris perintah tidak 0.8.7.
Autumnsault
72

Saya melakukan riset tepat setelah jawaban saya sebelumnya (maaf, saya harus melakukannya sebelum itu).

Semua masalah diselesaikan dengan Rake gem 0.9.2 .. Saya mengikuti langkah-langkah ini:

  • Saya menginstal gem install rake -v=0.9.2(saya memiliki permata 0.9.1)
  • menghapus 0.9.1 dengan gem uninstall rake -v=0.9.1
  • diperbarui dengan bundle update
  • kemudian db:migratemuncul peringatan,WARNING: Global access to Rake DSL methods is deprecated. Please....

    Itu dipecahkan dengan menambahkan berikut ini ke file Rake.

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
  • Saya module ::RakeFileUtils extend Rake::FileUtilsExtendmembatalkan opsi yang disarankan oleh @databyte.

Ini berarti bahwa permata Rake 0.9.2 berfungsi dengan baik!

Arrumaco
sumber
Ikuti tiga langkah pertama dan saya tidak mendapat peringatan sehingga tidak repot dengan sisanya, Terima kasih atas sarannya!
Abe Petrillo
1
Ini memohon saya untuk bertanya ... Mengapa saya harus meretas Rake untuk mempertahankan fitur itu? Apa yang Rake coba lakukan, dan apa yang harus saya gunakan sekarang?
Ryanmt
@Arrumaco, Apa direktori untuk file Rake?
Ctak
Perlu dicatat bahwa penambahan RakeFileharus dilakukan sebelum require 'rake'- menangkap saya :)
Ciaran Archer
12
masalah yang sama, tapi saya sudah menyapu (0.9.2, 0.8.7). Menginstal ulang 0.9.2 tampaknya memperbaiki masalah: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK.
54

Melewati Bab 2 Railstutorial (demo_app) dan mengalami masalah ini. Saya mencoba semua jawaban lain yang tercantum di sini, tetapi tidak bisa berfungsi sampai saya melakukan ini:

Letakkan ini di Rakefile Anda di atas memerlukan 'rake':

require 'rake/dsl_definition'

via Bagaimana memperbaiki masalah Rake :: DSL konstan yang tidak diinisialisasi pada Heroku?

Saya juga mengaktifkan kembali dan mendorong semua file ke Github dan Heroku.

djblue2009
sumber
Ini sepertinya jawaban terbaik karena menurunkan versi dari 0.9.2 ke 0.8.7 akan memecah beberapa ketergantungan permata tergantung pada setiap kasus, seperti milik saya :) Terima kasih!
DiegoSalazar
Itu tidak bekerja untuk saya. Saya mendapatkan "tidak ada file seperti itu untuk memuat - rake / dsl_definition" ketika melakukan rake db: create
KMC
25

Yang perlu saya lakukan adalah menggunakan:

gem install rake

Saya sudah versi 0.9.2, hanya perlu menginstal.

Branstar
sumber
wow itu berhasil untuk saya. Tapi bisakah Anda menjelaskan mengapa saya harus menginstal rake sementara saya rake harus sudah ada?
KMC
Saya masih belum benar-benar ahli, tetapi pemahaman saya adalah bahwa ada perbedaan antara 'menginstal' permata ke PC Anda dan 'menginstal' mereka dalam registri permata - saya menduga ini karena instalasi Ruby perlu tahu permata mana yang di mana di PC Anda. Mungkin ini adalah sesuatu yang bisa otomatis di masa depan, atau sudah otomatis dalam distribusi Ruby tertentu ...
Branstar
19

Pasang kembali permata rake dan itu akan berfungsi dengan baik:

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

Jika tidak, tentukan versi '0.8.7' di Gemfile Anda.

hohner
sumber
pendekatan ini bekerja untuk saya dan saya lebih suka tidak harus menurunkan versi ..
Tarnschaf
Bekerja untuk saya juga, hanya untuk menyapu -v 0.9.2.2
Haspemulator
10

Jika tidak menggunakan Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

Kemudian pilih untuk menghapus 0.9.0.

Travis Reeder
sumber
ini memperbaikinya bagi saya tanpa bundler (rel 2.3.8). Sudah mencoba menginstal rake 0.9.2 tetapi itu tidak memperbaikinya. Menginstal 0.8.7 dan menghapus 0.9.2 adalah yang akhirnya berhasil bagi saya.
Michael Durrant
8

Jika seperti saya Anda terjebak di rake 0.8.7, dan Anda menggunakan Rails 3.2.x maka railties menambahkan persyaratan untuk Rake :: DSL

Untuk mengatasi ini, ke bagian atas Rakefile Anda, Anda harus menambahkan:

module Rake
  module DSL
  end
end
Jonathon Horsman
sumber
7

Saya memecahkan masalah yang sama dengan langkah-langkah berikut:

Dalam Gemfile:

gem 'rake', '0.9.2'

Kemudian jalankan ini di konsol:

sudo bundle update rake

Kemudian tambahkan baris berikut ke Rakefile:

require 'rake/dsl_definition'
include Rake::DSL
Gaurav Gupta
sumber
4

Saya memiliki masalah yang sama dan harus menggunakan permata rake 0.8.7 bukannya 0.9.0.

Paul
sumber
4

Saya adalah pengguna Windows XP dan saya memiliki masalah yang sama.

Saya memasukkan permata "rake", "0.8.7" ke dalam gemfile, dan kemudian mengetik yang berikut dari jendela perintah.

bundle update rake

Ini memperbaiki masalah saya.

Tuan Pemula
sumber
bekerja untuk saya juga, mulai hari ini. hanya mencoba kode rel pada Win7.
arscariosus
4
  1. Pergi ke jalur proyek Anda
  2. Tipe bundle install --path=vendor/bundle
  3. Tipe bundle exec rake db:migrate

Untuk memulai jenis server bundle exec rails s. Gunakan bundle exec dan Anda akan yakin bahwa Anda menggunakan permata yang tepat (versi yang diperlukan) untuk proyek Anda. Juga saya akan merekomendasikan Anda untuk menambahkan vendor/bundleke .gitignorejika Anda menggunakan gitdan membuat alias untuk bundle exec. Jika Anda menggunakan, zshAnda dapat mengikuti pendekatan ini

ka8725
sumber
3

Sama seperti Branstar di atas - terima kasih Branstar!

  • OS: Windows Vista
  • Level: Benar-benar baru di Ruby on Rails
  • Saya sudah menginstal Ruby 1.9.2

Saya mengikuti instruksi di Running Rails 3 di Windows .

Semua bekerja sampai bagian "rake db: bermigrasi" yang memberi saya output yang sama dengan posting asli.

Saya berlari:

gem install rake

Saya berlari lagi:

rake db:migrate

Kemudian saya dapat memulai server Ruby on Rails dan memiliki semuanya.

Terima kasih lagi Branstar :-)

zimini
sumber
2

Saya merasa untuk Anda (mikhailvs), ini benar-benar membuat frustrasi. Saya sudah gila selama hampir satu hari penuh. Saya bahkan menghapus Ruby dan semua file yang bergantung padanya dan mematikan PC saya, tetapi saya masih mendapatkan masalah yang sama.

Apa yang saya dapatkan dari pesan kesalahan adalah masalah dengan Rake 0.9.2. Sepertinya itu tidak sepenuhnya diinstal. Jadi saya harus menginstal ulanggem install rake -v=0.9.2

Saya tidak yakin apakah saya telah menyapu –v0.9.1 diinstal. Jadi untuk memastikan saya aman saya mencoba menghapus versi lama itu gem uninstall rake -v=0.9.1. Tetapi ditunjukkan kepada saya pesan kesalahan

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

OK, jadi saya memeriksa semua direktori Rake di PC saya, dan ternyata saya hanya punya Rake 0.9.2. Kemudian untuk memeriksa apakah semuanya baik-baik saja, saya bermigrasi dengan rake db:migrate. Dan itu berhasil :)

Saya rasa saya tidak memiliki Rake 0.9.1 karena saya membersihkan-instal Ruby ( rubyinstaller-1.9.2-p180 - pada sistem Windows 7 saya) dan semua permata juga. Sementara itu Rake 0.9.2 tidak sepenuhnya diinstal.

egyamado
sumber
2

Menghapus instalan dengan "gem uninstall rake" bekerja untuk saya, saya memiliki 2 versi diinstal, jadi saya bercanda melakukan instal ulang bersih.

"rake db: create" , untuk memastikan database ada dan kemudian "rake db: bermigrasi" untuk menyegel kesepakatan.

Christopher
sumber
2

Saya memiliki masalah yang sama menggunakan Rake 0.9.2.2. Saya memecahkan masalah ini dengan menggunakan bundle exec.

Sean Kibler
sumber
0

Instal rake 0.8.7 dan hapus instalan 0.9.2.2

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

Sekarang gunakan

$ bundle exec rake db:migrate

Saya pikir ini akan membantu Anda;)

Anuj
sumber
0

Lari

bundle exec rake db:migrate

ini bekerja untuk saya.

JakeGould
sumber