【问题标题】:Running gems rake tasks from application rake tasks从应用程序 rake 任务运行 gems rake 任务
【发布时间】:2014-12-05 11:53:28
【问题描述】:

我正在尝试从我的应用程序的 rake 任务中添加 gem (geocoder https://github.com/alexreisner/geocoder) 中的 rake 任务,因为我希望它在数据库构建后立即运行。

所以我在 rakefile 中有这段代码

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'

任何线索我做错了什么?

【问题讨论】:

  • 您必须将类作为参数传递才能执行。
  • @phoet 我一小时以来一直在尝试以不同的方式指定参数,在您链接的问题中看到,以及这些stackoverflow.com/questions/825748/…,但我不断收到“请指定一个类(模型)的错误。 stuff_args = {"CLASS" => "ProposedTodo" } 这是我最后尝试的:'Rake::Task["geocode:all"].execute(Rake::TaskArguments.new(stuff_args.keys, stuff_args.values ))'有什么线索吗?
  • 它可能是参数的大写名称吗?

标签: ruby-on-rails ruby-on-rails-4 rubygems rake ruby-on-rails-4.1


【解决方案1】:

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

为了记录,这就是你如何用参数调用任务

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

在您的情况下,我首先没有意识到它实际上使用环境变量而不是读取为ENV['CLASS'] 的任务参数。

这将回答您的问题,因此您可以将其设置为 ENV['CLASS'] = 'ClassName' 或将其传递给您对 rake 任务 rake geolocal CLASS=ProposedAccomodation 的调用。

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

【讨论】:

  • 我明白了。这实际上是可行的,在任务中设置参数,如 ENV['CLASS'] = 'Class' ,这就是我想要的。在单个 rake 任务中执行此操作的优点是,我对要组合在一起的同一任务进行了多次调用,并且这种方式可以正常工作。谢谢
猜你喜欢
  • 2010-10-09
  • 2012-11-15
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多