Akses global ke metode Rake DSL tidak digunakan lagi

86

Saya mengerjakan buku tutorial Ruby on Rails 3 dan mengetik yang berikut di baris perintah:

rake db:migrate

yang menghasilkan peringatan berikut.

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'

Saya tidak yakin apa yang harus saya lakukan atau bagaimana mengatasinya. Saya tidak tahu perintah lain untuk Rake.

Bagaimana cara memperbaiki masalah ini?

chell
sumber

Jawaban:

64

Saya menemukan ini di pertanyaan Stack Overflow Ruby on Rails dan Rake masalah: Rake :: DSL konstan yang tidak diinisialisasi . Ini mengacu pada tweet @DHH.

Masukkan yang berikut ini ke dalam Gemfile Anda

gem "rake", "0.8.7"

Anda mungkin melihat sesuatu seperti

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

Saya masih memiliki salinan Rake 0.9.1 di direktori saya, jadi saya menghapusnya.

Anda dapat "menghapus" Rake 0.9.1 dengan menjalankan perintah berikut:

gem uninstall rake -v=0.9.1

Jika Anda memasang beberapa versi permata, Anda akan diminta untuk memilih versi.

Setelah 0.9.1 dibersihkan, saya lari

bundle update rake

dan akhirnya bisa membuat file database saya. Saya menggunakan rake db:create, tetapi seharusnya berfungsi rake db:migratejuga.

Saya harap ini membantu.

Brian Bruijn
sumber
5
Itu tidak berhasil untuk saya. Saya harus benar-benar menghapus rake 0.9.1> gem uninstall rake -v = 0.9.1 dan kemudian> bundle update Thanks Antonio
1
Saya setuju dengan Antonio - ketika saya mengatakan untuk menghapus rake 0.9.1 yang saya maksud dengan menggunakan gem uninstall rake -v=0.9.1. Kesalahan saya karena tidak menjelaskannya. Terima kasih atas klarifikasi Antonio! Salam, Brian
Brian Bruijn
13
Saya tidak berpikir itu baik untuk sengaja menggunakan perpustakaan lama, ketika yang lebih baru dapat dibuat untuk bekerja, lihat komentar di bawah.
Smar
2
Solusi yang lebih sederhana adalah yang disarankan oleh NPatel di bawah ini. Cukup tambahkan satu baris ke Rakefile.
Slobodan Kovacevic
Saya tidak beruntung dengan resolusi ini. Itu masih muncul dengan kesalahan yang sama setelah menghapus rake 0.9.1 atau 0.9.2 kemudian menjalankan pembaruan bundel.
Marc
111

Menambahkan include Rake::DSLke Rakefile sebelum aplikasi load_tasks dipanggil juga berhasil untuk saya.

Jadi dalam kasus pengguna di atas sebelum DemoApp::Application.load_tasksdi Rakefile.

Patelify
sumber
Terima kasih. Memperbaiki "PERINGATAN: Akses global ke metode Rake DSL tidak berlaku lagi." masalah.
Slobodan Kovacevic
Apakah ini cara yang tepat untuk memperbaiki masalah ini?
Marc
2
@ Marc, saat ini ini adalah satu-satunya perbaikan yang saya ketahui tanpa meningkatkan ke rails 3.0.8 atau lebih tinggi. Masalah ini diatasi dalam rilis tersebut: github.com/rails/rails/commit/… . Jika Anda menemukan perbaikan yang lebih baik, beri tahu saya. Juga, menurut peringatan tersebut saya akan berpikir bahwa ini adalah perbaikan yang tepat.
Patelify
1
Ini adalah solusi yang saya gunakan. Saya lebih suka menambahkan garis daripada bermain game dengan versi Rake mana yang berfungsi dengan apa.
jaydel
2
Ini bekerja untuk saya dengan 1.9.2 dan Rails 3.0.7 dengan Rake 0.9.2
Steven Chanin
5

Saya mengalami masalah yang sama di Windows dengan penginstal. Ruby 1.9.2 dan Rails 3.0.9. Inilah yang saya lakukan:

bundle update rake
bundle show rake

Setelah melakukan itu saya menjalankan rake 0.9.2.

Kemudian saya memperbarui Rakefile di folder root aplikasi sebagai berikut:

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

Seperti disebutkan dalam komentar, pastikan nama aplikasi Anda benar dalam dua baris yang sesuai di atas.

LikeMaBell
sumber
1
Dan untuk mendapatkan heroku rake db:migrateperintah untuk bekerja, saya juga harus menambahkan require 'rake/dsl_definition'rakefile (di atas baris 'rake' yang dibutuhkan).
LikeMaBell
Melakukan semua ini berhasil untuk saya, tetapi tidak diperlukan. Usulan NPatel tertangani dengan baik.
Scott Swezey
0

Jika Anda melihat ini di versi Rails yang lebih baru (seperti 3. +), Anda mungkin juga ingin memverifikasi bahwa lingkungan Anda bersih dengan menggunakan RVM http://beginrescueend.com/ dan membuat ruby ​​& gemset khusus untuk proyek Anda.

Gunakan file .rvmrc untuk setiap proyek, ini akan menjamin Anda tidak mendapatkan permata sistem yang lebih lama ke dalam proyek Anda. Yang telah menggigitku sebelumnya.

Ini mencegah keharusan untuk berkeliaran dengan Rakefiles yang dihasilkan & semacamnya.

Jim Munro
sumber
0

bundle exec rake db: migrate akan menyelesaikan masalah versi ruby ​​Anda

Galuga
sumber
Ini hanya berfungsi jika Anda memiliki versi rake yang berfungsi di Gemfile Anda, dan mengetik "rake" menggunakan beberapa versi berbeda yang diinstal di PATH Anda
RyanHennig