Rails 任务不是 运行 除非 rails runner 自 linux 服务器计算机启动后已在命令提示符下执行

Rails task not running unless rails runner has been executed in the command prompt since the linux server machine's bootup

我正在尝试执行此任务以从控制器更新大量数据,以便当管理员用户访问此方法时它将 运行 执行上述任务。我已经确认任务本身没有任何问题,但我不太确定它的调用方式。

我 运行 遇到的问题是,当我重新启动虚拟机 运行 连接服务器(使用 vagrant)时,程序不会执行。但是经过一些测试,我发现在我 运行 rails 运行ner (执行的命令无关紧要)之后它会开始正在工作。

class Admin::AccessLogManageController < Admin::AdminController
  def update_project_ids
    command = "rbenv exec bundle exec rails runner --environment=#{Rails.env} Tasks::UpdateAccessLogProjectIds.execute"
    pid =spawn(command, :chdir=>".")
    Process.detach(pid)
  end
end

我发现了问题。它与 spring 有关,本质上是将环境设置为尝试 运行 和 spring,但它不会自动启动进程。添加 DISABLE_SPRING=1 似乎可以解决问题。

class Admin::AccessLogManageController < Admin::AdminController
  def update_project_ids
    command = "DISABLE_SPRING=1 rbenv exec bundle exec rails runner --environment=#{Rails.env} Tasks::UpdateAccessLogProjectIds.execute"
    pid =spawn(command, :chdir=>".")
    Process.detach(pid)
  end
end

这里有我解决问题所需的信息。