这是我简单的佣金任务:
desc 'Create objects from csv'
task :add_missing_information_from_url, [:url] => [:environment] do |t, args|
url = args[:url]
puts "STARTED"
CSV.new(open(url), :headers => :first_row).to_enum.with_index(1).each do |line, i|
user = User.find(line['id'])
next if user.nil?
user.flag = true
user.save
puts "#{i} - #{user.firstname}"
end
end
对于初学者来说,没有做任何聪明的事情。但由于某些原因,这对Heroku不起作用。这就是我执行任务的方式(我的命名空间是dbs):
heroku run rake dbs:add_missing_information_from_url['http://lvh.me/file.csv']
或者在开发机器上:
bundle exec rake dbs:add_missing_information_from_url['http://lvh.me/file.csv']
这是我在运行heroku任务时从控制台获得的唯一输出:
Running `rake dbs:add_missing_information_from_url[http://lvh.me/file.csv]` attached to terminal... up, run.7246
在没有打印任何内容的情况下执行后返回我的shell,也不保存用户对象。
然而,当我在我的开发机器上运行它时,一切正常,从打印STARTED
开始。
我在这里做错了什么?
答案 0 :(得分:0)
是我还是你的日志实际输出了这个:
Running `rake dbs:add_missing_information_from_url[http://lvh.me/file.csv]` attached to terminal... up, run.7246
如果仔细查看[http://lvh.me/file.csv]
中的参数,它似乎不是一个字符串。您希望日志输出['http://lvh.me/file.csv']
。
所以我建议你尝试像这样运行你的任务:
heroku run rake dbs:add_missing_information_from_url['"http://lvh.me/file.csv"']