【问题标题】:run multi delayed_job instances per RAILS_ENV每个 RAILS_ENV 运行多个延迟作业实例
【发布时间】:2011-12-24 07:32:52
【问题描述】:

我正在开发一个带有多个 RAILS_Env 的 Rails 应用程序

env_name1:
  adapter:  mysql
  username: root
  password:
  host:     localhost
  database: db_name_1

env_name2:
  adapter:  mysql
  username: root
  password:
  host:     localhost
  database: db_name_2
...
..
.

我正在使用delayed_job (2.0.5) 插件来管理异步和后台工作。

我想为每个 RAILS_ENV 启动多个延迟作业:

RAILS_ENV=env_name1 script/delayed_job start

RAILS_ENV=env_name2 script/delayed_job start
..

我注意到我只能运行一个 delay_job 实例 第二次,我有这个错误“错误:已经有一个或多个程序实例正在运行”

我的问题:不可能每个 RAILS_ENV 运行多个延迟作业实例吗? 谢谢

【问题讨论】:

    标签: ruby-on-rails multithreading asynchronous delayed-job


    【解决方案1】:

    您可以运行多个延迟作业实例,只要它们具有不同的进程名称。就像 Slim 在他的评论中提到的那样,您可以使用 -i 标志为进程名称添加唯一的数字标识符。所以命令看起来像:

    RAILS_ENV=env_name1 脚本/delayed_job -i 1 开始

    RAILS_ENV=env_name2 脚本/delayed_job -i 2 开始

    这将创建两个单独的延迟作业实例,分别命名为delayed_job.1 和delayed_job.2

    一个问题是,当您这样做时,您还必须在停止它们时使用相同的标志。在调用 stop 时省略 -i 1 或 -i 2 不会停止它们。由于延迟的作业将无法找到正确的相应进程来停止。

    【讨论】:

    • 很好的建议。我开始这样做 - RAILS_ENV=env_name script/delayed_job -i "$RAILS_ENV" start。这让我无需尝试记住实例编号即可启动和停止特定实例。
    • 即使存在 -i 选项,在我的情况下,它表示已经运行。
    【解决方案2】:

    不确定它是否能解决您的问题,但是...我经常需要运行多个版本的script/server - 而且这些版本也不能很好地相互配合。让它们运行的​​方法是使用不同的端口。例如:

    RAILS_ENV=env_name1 script/server -p 3000
    RAILS_ENV=env_name2 script/server -p 3002
    

    也许这也适用于delayed_job?

    (虽然我会避免使用端口 3000,因为它是 std rails 端口):)

    【讨论】:

    • 谢谢 Taryn,你帮我想到了delayed_job helper --helper "'-p', '--prefix NAME', "String to be prefixed to worker process names" and '-i ', '--identifier=n', '工人的数字标识符。'
    • 答案:RAILS_ENV=env_name1 script/server -i 1 RAILS_ENV=env_name2 script/server -i 2
    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多