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