工头在整个过程结束后终止,并且没有按照 Procfile 中的定义 运行
Foreman terminates after the whole process and doesn't run accordingly as defined in Procfile
我正在将数据从基于 Web 的 CSV 导入数据库,因此我创建了一个将数据导入数据库的 rake 任务。然而,我试图让 运行 宁我的 rails 应用程序有点无缝,我将 import rake task
和 running rails server
集成到工头中。
但是,当我 运行 foreman start
时,进程开始但在 rake 任务完成后终止。我也希望 rake 任务在 运行ning rails s
之前先开始
下面是我所做的:
lib/tasks/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启动时,下图显示了过程
在运行宁rails s
命令之前,我会喜欢工头的rake
任务先运行。我也不希望它自行终止。我不知道哪里做错了。
感谢任何帮助。
我通过重构 Procfile 解决了这个问题。我没有执行两项任务,而是使用 &&
将其合并为一个命令,这样我就可以确定哪个命令使用前缀,哪个命令使用后缀。
所以我将个人资料更改为:
tasks: rake web_import:users && rails s -p 3000
有了这个,我首先导入 运行,最后导入服务器命令。
如果您注意到了,我添加了 -p
端口,以便不确定服务器是否正在侦听端口 3000。请注意,添加端口是可选的。
我希望这对某人也有帮助。
我正在将数据从基于 Web 的 CSV 导入数据库,因此我创建了一个将数据导入数据库的 rake 任务。然而,我试图让 运行 宁我的 rails 应用程序有点无缝,我将 import rake task
和 running rails server
集成到工头中。
但是,当我 运行 foreman start
时,进程开始但在 rake 任务完成后终止。我也希望 rake 任务在 运行ning rails s
下面是我所做的:
lib/tasks/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启动时,下图显示了过程
在运行宁rails s
命令之前,我会喜欢工头的rake
任务先运行。我也不希望它自行终止。我不知道哪里做错了。
感谢任何帮助。
我通过重构 Procfile 解决了这个问题。我没有执行两项任务,而是使用 &&
将其合并为一个命令,这样我就可以确定哪个命令使用前缀,哪个命令使用后缀。
所以我将个人资料更改为:
tasks: rake web_import:users && rails s -p 3000
有了这个,我首先导入 运行,最后导入服务器命令。
如果您注意到了,我添加了 -p
端口,以便不确定服务器是否正在侦听端口 3000。请注意,添加端口是可选的。
我希望这对某人也有帮助。