RakeDSLメソッドへのグローバルアクセスは非推奨です


86

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の他のコマンドは知りません。

この問題を解決するにはどうすればよいですか?

回答:


64

私はこれをStackOverflowの質問Rubyon RailsとRakeの問題で見つけました:初期化されていない定数Rake :: DSL。@DHHのツイートを指します。

あなたのGemfileに以下を入れてください

gem "rake", "0.8.7"

あなたは次のようなものを見るかもしれません

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

ディレクトリにRake0.9.1のコピーが残っていたので、削除しました。

次のコマンドを実行して、Rake0.9.1を「削除」できます。

gem uninstall rake -v=0.9.1

gemの複数のバージョンがインストールされている場合は、バージョンを選択するように求められます。

0.9.1がクリーンアップされた後、私は走りました

bundle update rake

そしてついに私のデータベースファイルを作成することができました。を使用rake db:createしていましたがrake db:migrate、同様に機能するはずです。

お役に立てば幸いです。


5
それは私にはうまくいきませんでした。私は実際に熊手0.9.1を削除する必要がありました>宝石のアンインストール熊手-v = 0.9.1、その後>バンドルアップデートのおかげアントニオ

1
私はアントニオに同意します-レーキ0.9.1を削除すると言ったとき、私はを使用することを意味しましたgem uninstall rake -v=0.9.1。それを明確にしないための私の間違い。アントニオの説明をありがとう!乾杯、ブライアン
ブライアンブルーイン2011年

13
以下のコメントを参照して、新しいライブラリを機能させることができる場合、古いライブラリを意図的に使用するのは良いことではないと思います。
Smar 2011年

2
より単純な解決策は、以下のNPatelによって提案されたものです。Rakefileに1行追加するだけです。
Slobodan Kovacevic 2011年

私はこの決議で運がなかった。rake 0.9.1または0.9.2をアンインストールしてからバンドル更新を実行した後も、同じエラーが発生しました。
マーク

111

include Rake::DSLアプリケーションload_tasksが呼び出される前にRakefileに追加することも、私のために機能しました。

したがって、上記のユーザーの場合DemoApp::Application.load_tasks、Rakefileの前にあります。


ありがとう。「警告:RakeDSLメソッドへのグローバルアクセスは非推奨です」を修正しました。問題。
Slobodan Kovacevic 2011年

これはこの問題を解決するための適切な方法ですか?
マーク

2
@Marc、現在、これはRails3.0.8以降にアップグレードせずに私が知っている唯一の修正です。この問題は、そのリリースで解決されています:github.com/rails/rails/commit/…。より良い修正を見つけたら、私に知らせてください。また、警告によると、それは適切な修正だと思います。
2011年

1
これが私が行った解決策です。どのバージョンのRakeが何で動作するかをゲームでプレイするよりも、単に行を追加したいのです。
jaydel 2011年

2
これは1.9.2で動作し、Rails3.0.7でRake0.9.2で動作しました
Steven Chanin 2011

5

Windowsでもインストーラーで同じ問題が発生していました。Ruby1.9.2およびRails3.0.9。これが私がしたことです:

bundle update rake
bundle show rake

それを行った後、私はrake0.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つの適切な行で正しいことを確認してください。


1
また、heroku rake db:migrateコマンドを機能さrequire 'rake/dsl_definition'せるには、rakefileに追加する必要がありました(require'rake '行の上)。
likeMaBell 2011

これらすべてを行うことは私にとってはうまくいきますが、必須ではありません。NPatelによる提案はそれをうまく処理しました。
Scott Swezey 2011

0

Railsの新しいバージョン(3. +など)でこれが見られる場合は、RVM http://beginrescueend.com/を使用し、プロジェクト用に特定のruby&gemsetを作成して、環境がクリーンであることを確認することもできます。

プロジェクトごとに.rvmrcファイルを使用します。これにより、古いシステムgemがプロジェクトに取り込まれないことが保証されます。これは前に私を噛んだことがあります。

これにより、生成されたRakefileなどをいじくり回す必要がなくなります。


0

bundle exec rake db:migrateは、Rubyバージョンの問題を解決します


これは、Gemfileに動作するバージョンのrakeがあり、「rake」と入力すると、PATHにインストールされている別のバージョンが使用されている場合にのみ機能します
RyanHennig 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.