首页 > 解决方案 > Foreman 在整个过程之后终止,并且不会按照 Procfile 中的定义相应地运行

问题描述

我正在将数据从基于 Web 的 CSV 导入数据库,所以我创建了一个 rake 任务,将数据导入数据库。但是,我尝试让我的 rails 应用程序运行得有点无缝,并且我集成了import rake taskrunning rails serverforeman 中。

但是,当我运行时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

档案

rake: rake web_import:users
server: rails s

当我运行 forman start 时,下图显示了该过程

过程图像

我希望在运行命令rake之前先运行工头中的任务。rails s我也不希望它自行终止。我不知道做错了什么。

任何帮助表示赞赏。

标签: ruby-on-railsrubyforeman

解决方案


我通过重构 Procfile 解决了这个问题。我没有使用两个任务,而是将它合并到一个命令中,&&这样我就可以确定哪个命令采用前缀,哪个命令采用后缀。

所以我将配置文件更改为:

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

有了这个,我首先运行我的导入,最后运行服务器命令。

如果您注意到了,我添加了带有-p襟翼的端口,以免确保服务器正在侦听端口 3000。请注意,添加端口是可选的。

我希望这对某人也有帮助。


推荐阅读