gpt4 book ai didi

Ruby 1.9 Rails 3 启动带变量的守护进程

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:00 25 4
gpt4 key购买 nike

我有一个我正在尝试启动的守护进程,但我想在启动它时在守护进程中设置一些变量。这是我用来控制位于 RAILSAPP/script/daemon 中的守护进程的脚本

#!/usr/bin/env ruby
require 'rubygems'
require 'daemons'

ENV["APP_ROOT"] ||= File.expand_path("#{File.dirname(__FILE__)}/..")
ENV["RAILS_ENV_PATH"] ||= "#{ENV["APP_ROOT"]}/config/environment.rb"

script = "#{ENV["APP_ROOT"]}/daemons/#{ARGV[1]}"

Daemons.run(script, dir_mode: :normal, dir: "#{ENV["APP_ROOT"]}/tmp/pids")

当我启动这个守护进程时,我想将一个变量传递给它,就像对事件记录的引用一样,这样我就可以将守护进程的初始运行作为基础。

最佳答案

如果你想获取一个特定的 ActiveRecord 对象,你可以只传递 id,或者类名 + id 作为命令行上的附加参数。由于您已经使用 ARGV[1] 作为脚本名称,您可以将其作为 ARGV[2] 和类似 Product_123 的内容传递,然后通过拆分进行解析,并执行 Product.find(123) 以获取实际记录。

另一种方法是将对象信息放入 memcached 或 redis 之类的队列中,然后让守护进程从队列中取出信息。这将使您的守护程序启动更简单一些,并允许您排队多个记录以供守护程序处理。 (无论如何,只处理单个记录的东西可能最好写成脚本。)

我对您的脚本的另一个担忧是使用 ENV["APP_ROOT"]。那真的需要进入环境吗?如果你有第二个守护进程怎么办?看起来它作为一个局部变量会更好,如果你在守护进程中需要它,你总是可以相对于守护进程的文件所在的位置获取它。

关于Ruby 1.9 Rails 3 启动带变量的守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com