我有一个问题,当我这样做:
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
并获取有关角色的信息。但是第二个任务失败了:
NameError: uninitialized constant Xaaron::Role
我在我的主应用程序中运行每个任务,因为这些任务都在一个引擎中,使用:
bin/rake xaaron:get_roles` and `bin/rake xaaron:get_role
我可以在使用该引擎的主应用程序中运行bin/rails c
,然后运行Xaaron::Role
并获取有关Roles表的信息。
为什么第二个失败了,而第一个没有?是否有参数的作用域?
5条答案
按热度按时间w46czmvw1#
我不知道为什么这两种方法都有效,但是如果这是Rails,而那些是Rails模型,那么你的任务应该取决于环境:
根据
:environment
任务,它首先加载Rails。参见:What's the 'environment' task in Rake?。
kdfy810k2#
您也可以运行Rake任务
这将首先加载Rails环境。
7d7tgy0s3#
我一直得到一个Rake任务的未初始化的常量错误,即使在依赖于
:environment
并使用bundle exec
运行之后也是如此。问题是,我正在创建一个
Rake::TestTask
,尽管Rake任务可以访问所有常量,但测试文件本身无法访问常量。解决方案是将这一行添加到我的测试文件的顶部:
这是Rake任务:
7lrncoxx4#
要添加,从Ruby 1.9及以上版本开始,您可以使用以下哈希语法:
然后你可以运行下面的命令来运行Rake任务:
或
hlswsv355#
config.autoload_paths += %W(#{config.root}/lib)
在application.rb中为我工作