可以调用与任务相同的rake文件中的方法吗?在下面的代码中,您可以看到我有方法调用get_search_url,它将被分配给url。
namespace :populate do
desc "ETC"
task :db => :environment do
Report.where(link: "").each do |word|
url = get_search_url(word.name)
doc = Nokogiri::HTML(open(url))
word.update_columns(link: link)
end
end
def get_search_url(keyword)
return "URL/keyword"
end
end
答案 0 :(得分:8)
是的,这绝对是可能的。只需在命名空间后定义那些方法;)
namespace :populate do
desc "ETC"
task :db => :environment do
Report.where(link: "").each do |word|
url = get_search_url(word.name)
doc = Nokogiri::HTML(open(url))
word.update_columns(link: link)
end
end
end
def get_search_url(keyword)
return "URL/keyword"
end
答案 1 :(得分:0)
但是,如果您在两个不同的rake任务中定义相同的方法,则在运行rake时,它们都将被全局加载,并且其中一个方法定义将被另一个重新定义/覆盖!
更好的做法是在单独的模块中定义方法,然后将该模块包含在rake文件中。 参见https://kevinjalbert.com/defined_methods-in-rake-tasks-you-re-gonna-have-a-bad-time/(解决方案3)