Я работаю над импортом данных из веб-интерфейса CSV в базу данных, поэтому я создал задачу rake, которая импортирует данные в базу данных. Тем не менее, я попытался сделать приложение для моих рельсов более легким и интегрировал import rake task
и running rails server
в мастера.
Однако, когда я запускаю foreman start
, процессы запускаются, но заканчиваются после завершения задачи rake. Мне также понравится, что задание rake сначала запустится перед запуском rails s
Вот что я сделал ниже:
Библиотека / задачи / 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
. Я также не хочу, чтобы это прекратилось само по себе. Я не знаю, что делаю не так.
Любая помощь приветствуется.