0

我试图从我的应用程序的rake任务中的gem(geocoder https://github.com/alexreisner/geocoder)添加一个rake任务,因为我希望在构建数据库之后运行该任务。从应用程序rake任务运行gems rake任务

所以我有一个Rake文件

task :geolocal do 
    spec = Gem::Specification.find_by_name 'geocoder' 
    load "#{spec.gem_dir}/lib/tasks/geocoder.rake" 
    puts '##################GEOCODING##############' 
    Rake::Task["geocode:all CLASS=ProposedAccomodation"].execute 
end 

这里面的代码只是开始关注此问题Ruby Rake load tasks from a gem 但我不断收到同样的错误

Don't know how to build task 'geocode:all CLASS=ProposedAccomodation' 

任何线索我做错了吗?

+0

[Rake Execute With Multiple Arguments]可能重复(http://stackoverflow.com/questions/8033303/rake-execute-with-multiple-arguments) – phoet 2014-10-10 12:43:24

+0

您必须将该类作为参数传递才能执行。 – phoet 2014-10-10 12:43:48

+0

@phoet我试图从一个小时来指定参数,以不同的方式,在你链接的问题中看到,以及这些http://stackoverflow.com/questions/825748/how-do-i-pass -command-line-arguments-to-rake-task,但我不断收到'请指定CLASS(模型)'错误。 (Rake :: TaskArguments.new(stuff_args.keys,stuff_args),这是我最后一次尝试的:'Rake :: Task [“geocode:all”]。(Rake :: TaskArguments.new(stuff_args.keys,stuff_args .values))'任何线索? – sissy 2014-10-10 14:36:42

回答

0

所以这里有几件事情需要考虑。

备案,这就是你怎么骂与你的情况的论点

Rake::Task["taskname"].execute(args) 

任务,我没有第一次意识到,它实际上使用环境变量,而不是被理解为ENV['CLASS']任务参数。

将回答您的问题,因此您可以将其设置为ENV['CLASS'] = 'ClassName'或将其传递给您拨打耙子任务rake geolocal CLASS=ProposedAccomodation的电话。

这给我带来了一个下面的问题:为什么你不只是调用原始的rake任务,你没有添加任何东西。

+0

我明白了。这实际上是工作,在ENV ['CLASS'] ='Class'这样的任务中设置参数,这正是我所需要的。在单个rake任务中完成它的好处是,我有几次调用我想要组合在一起的相同任务,并以这种方式工作。谢谢 – sissy 2014-10-13 09:22:54