web-dev-qa-db-ja.com

rakeタスクの初期化されていない定数を取得するのはなぜですか、Rails 4.1.8

私はこの奇妙な問題を抱えています:

  namespace :xaaron do
    task :get_roles do
      roles = Xaaron::Role.all
      puts roles
    end

    task :get_role, [:name] do |t, args|
      role = Xaaron::Role.find(args[:name].parameterize)
      puts role
    end
  end

最初のタスクは完全にうまく機能します。 binding.pryサイドでXaaron::Roleとロールに関する情報を取得します。しかし、2番目のタスクはNameError: uninitialized constant Xaaron::Role

メインのアプリで(これらのタスクはエンジン内にあるため)各タスクを次のように実行します:bin/rake xaaron:get_rolesおよびbin/rake xaaron:get_role

なぜ2つ目は爆発していますが、1つ目は爆発していませんか?議論に続くスコープの問題はありますか?

更新

bin/Rails c上記のエンジンを使用するメインアプリでXaaron::RoleとRolesテーブルに関する情報を取得します。

22
SeekingTruth

どちらが機能するのかはわかりませんが、これがRailsであり、それらがRailsモデルである場合、タスクは環境によって異なります。

task :get_roles => [ :environment ] do

:environmentタスクに依存することにより、最初にRailsをロードします。

また見なさい:

Rakeの「環境」タスクとは

52
DGM

次のようにrakeタスクを実行することもできます

bundle exec rake environment xaaron:get_role

これは最初にRails環境をロードします。

6
Max Prokopov