Форман завершает работу после завершения всего процесса и не запускается соответственно, как определено в Procfile.

Я работаю над импортом данных из веб-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. Я также не хочу, чтобы он прекратился сам по себе. Я не знаю, что делаю неправильно.

Любая помощь приветствуется.


person Afolabi Olaoluwa Akinwumi    schedule 04.05.2018    source источник
comment
Или если бы я мог определить приоритет того, какая задача запускается первой в мастере. Procfile   -  person Afolabi Olaoluwa Akinwumi    schedule 04.05.2018


Ответы (1)


Я решил это, рефакторинг Procfile. Вместо двух задач я объединил их в одну команду, используя &&, чтобы я мог определить, какая команда принимает префикс, а какая — суффикс.

Поэтому я изменил профиль на:

tasks: rake web_import:users && rails s -p 3000

При этом мой импорт выполняется первым, а серверная команда - последней.

Если вы заметили, я добавил порт с откидной крышкой -p, чтобы не быть уверенным, что сервер прослушивает порт 3000. Обратите внимание, что добавление порта необязательно.

Я надеюсь, что это тоже поможет кому-то.

person Afolabi Olaoluwa Akinwumi    schedule 04.05.2018