我有这个奇怪的问题,如果我这样做:
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
和bin/rake xaaron:get_role
。
为什么第二个爆炸但第一个爆炸?是否存在争论的事情?
更新
我应该注意,我可以在使用所述引擎的主应用中执行bin/rails c
并执行Xaaron::Role
并获取有关角色表的信息。
答案 0 :(得分:39)
我不确定为什么会这样,但如果这是rails并且那些是rails模型,那么你的任务应该取决于环境:
task :get_roles => [ :environment ] do
依赖于:environment任务,它首先加载rails。
另见:
答案 1 :(得分:3)
您还可以将rake任务作为
运行local_source = if system('curl -s https://local-gems.example.com > /dev/null') != false
# `curl` not available (`nil` returned)
# or local gem server accessible (`true` returned)
# try accessing:
'https://local-gems.example.com'
else
# Fall back on default behaviour
'https://rubygems.org'
end
source local_source do
gem 'local-gem'
end
这将首先加载Rails环境。
答案 2 :(得分:0)
要添加,从 Ruby 1.9 及更高版本开始,您可以使用以下哈希语法:
namespace :xaaron do
desc "Rake task to get roles"
task get_roles: :environment do
roles = Xaaron::Role.all
puts roles
end
#####
end
然后您可以运行以下命令来运行rake任务:
rake xaaron:get_roles
OR
bundle exec rake xaaron:get_roles
仅此而已。
我希望这会有所帮助