私はRuby on Rails 3チュートリアルブックで作業しており、コマンドラインで次のように入力しました:
rake db:migrate
次の警告が生成されました。
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'
私はそれについて何をすべきか、またはそれをどのように扱うのか分かりません。 Rakeの他のコマンドは知りません。
この問題を修正するにはどうすればよいですか?
これはStack Overflowの質問Ruby on Rails and Rake issues:uninitialized constant Rake :: DSL。@DHHツイートを指します。
Gemfileに以下を入力します
gem "rake", "0.8.7"
次のようなものが表示される場合があります
rake aborted!
You have already activated Rake 0.9.1 ...
ディレクトリにまだRake 0.9.1のコピーがあったので、削除しました。
次のコマンドを実行して、Rake 0.9.1を「削除」できます。
gem uninstall rake -v=0.9.1
Gemの複数のバージョンがインストールされている場合、バージョンを選択するよう求められます。
0.9.1が一掃された後、私は走りました
bundle update rake
そして最終的に私のデータベースファイルを作成することができました。 rake db:create
を使用していましたが、rake db:migrate
でも機能するはずです。
役に立てば幸いです。
アプリケーションload_tasksが呼び出される前にinclude Rake::DSL
をRakefileに追加することもうまくいきました。
したがって、上記のユーザーの場合、RakefileのDemoApp::Application.load_tasks
の前に。
Windowsでもインストーラーで同じ問題が発生していました。 Ruby 1.9.2 and Rails 3.0.9。ここで私がしたことは:
bundle update rake
bundle show rake
その後、rake 0.9.2を実行していました。
次に、次のようにアプリケーションルートフォルダーのRakefileを更新しました。
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
コメントに記載されているように、上の2つの適切な行でアプリの名前が正しいことを確認してください。
bundle exec rake db:migrateは、Rubyバージョンの問題を解決します
Rails(3. +など)の以降のバージョンでこれを見ている場合は、RVM http://beginrescueend.comを使用して環境がクリーンであることを確認することもできます。 / と特定のRuby&gemsetを作成します。
プロジェクトごとに.rvmrcファイルを使用します。これにより、プロジェクトに古いシステムgemが含まれないことが保証されます。それは私を前に噛みました。
これにより、生成されたRakefilesなどを操作する必要がなくなります。