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

标签 ruby ruby-on-rails-3 daemon

我有一个我正在尝试启动的守护进程,但我想在启动它时在守护进程中设置一些变量。这是我用来控制位于 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/

相关文章:

ruby-on-rails - RubyMine 错误

c# - Ruby 相当于 C# 的 ??运算符(operator)

ruby - 在 ubuntu 中单独安装 Ruby 1.9.2 的问题

ruby-on-rails-3 - Rails 中的日期字段和文本输入

bash - 制作 shell 脚本守护进程的最佳方法?

ruby - 如何在 Ruby 中将自定义类隐式转换为整数?

database - 从生产数据库的开发副本中删除敏感数据(有 gem 吗?)

ruby-on-rails-3 - 运行 Jasmine 规范时“未收到数据”

mysql - 我可以阻止 MAMP 在登录时强制我输入密码吗?

linux - 如何通过shell脚本在linux中注销服务