我正在努力将基于Web的CSV中的数据导入数据库,因此我创建了一个将数据导入数据库的rake任务。但是我尝试使我的rails应用程序运行一点点无缝,我将import rake task
和running rails server
集成到了工头中。
但是,当我运行foreman start
时,进程会启动,但在rake任务完成后会终止。我还希望在运行rails s
以下是我在下面所做的事情:
LIB /任务/ web_import.rake
require 'open-uri'
require 'csv'
namespace :web_import do
desc 'Import users from csv'
task users: :environment do
url = 'http://blablabla.com/content/people.csv'
# I forced encoding so avoid UndefinedConversionError "\xC3" from ASCII-8BIT to UTF-8
csv_string = open(url).read.force_encoding('UTF-8')
counter = 0
duplicate_counter = 0
user = []
CSV.parse(csv_string, headers: true, header_converters: :symbol) do |row|
next unless row[:name].present? && row[:email_address].present?
user = CsvImporter::User.create row.to_h
if user.persisted?
counter += 1
else
duplicate_counter += 1
end
end
p "Email duplicate record: #{user.email_address} - #{user.errors.full_messages.join(',')}" if user.errors.any?
p "Imported #{counter} users, #{duplicate_counter} duplicate rows ain't added in total"
end
end
Procfile
rake: rake web_import:users
server: rails s
当我运行forman start时,下图显示了该过程
我希望在运行rake
命令之前首先运行首领中的rails s
任务。我也不希望它自己终止。我不知道做错了什么。
感谢任何帮助。
答案 0 :(得分:0)
我通过重构Procfile解决了这个问题。我没有使用两个任务,而是使用&&
将其合并为一个命令,因此我可以确定哪个命令采用前缀,哪个命令采用后缀。
所以我将个人资料更改为:
tasks: rake web_import:users && rails s -p 3000
有了这个,我的导入运行首先,服务器命令是最后一个。
如果您注意到,我添加了带有-p
翻盖的端口,以便不确保服务器正在侦听端口3000.注意添加端口是可选的。
我希望这对某人也有帮助。