为什么我得到一个未初始化的常量rake任务,Rails 4.1.8

See*_*uth 17 ruby rake ruby-on-rails rake-task ruby-on-rails-4

我有这个奇怪的问题,如果我这样做:

  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
Run Code Online (Sandbox Code Playgroud)

第一项任务将完美无缺.我甚至可以放在binding.pry一边做,Xaaron::Role并获得有关角色的信息.但第二项任务爆炸说明NameError: uninitialized constant Xaaron::Role

我在我的主应用程序中运行每个任务(因为这些任务在引擎内)为:bin/rake xaaron:get_rolesbin/rake xaaron:get_role.

为什么第二个爆炸但第一个不爆炸?是否存在争论的事情?

更新

我应该注意,我可以bin/rails c在使用所述引擎的主应用程序中执行,Xaaron::Role并获取有关Roles表的信息.

DGM*_*DGM 45

我不确定为什么要么工作,但如果这是rails并且那些是rails模型,那么你的任务应该取决于环境:

task :get_roles => [ :environment ] do
Run Code Online (Sandbox Code Playgroud)

通过依赖于:environment任务,它首先加载rails.

也可以看看:

Rake的"环境"任务是什么?

  • 试试`:某事,[:param] => [:环境]` (2认同)

Max*_*pov 5

您还可以将rake任务运行为

bundle exec rake environment xaaron:get_role
Run Code Online (Sandbox Code Playgroud)

这将首先加载Rails环境。

  • 您是按字面意思输入“环境”一词还是打算将其替换为例如:`bundle exec rake production xaaron:get_role`? (3认同)