Ruby on rails 什么';这是在Rails服务器运行时执行守护进程的更好方法
我的Rails应用程序中有一些宝石,比如Ruby on rails 什么';这是在Rails服务器运行时执行守护进程的更好方法,ruby-on-rails,ruby,resque,sunspot,Ruby On Rails,Ruby,Resque,Sunspot,我的Rails应用程序中有一些宝石,比如resque,sunspot。当机器启动时,我手动运行以下命令: rake sunspot:solr:start /usr/local/bin/redis-server /usr/local/etc/redis.conf rake resque:work QUEUE='*' 在后台运行这些守护程序有更好的做法吗?在后台运行这些任务时是否有任何副作用?您可以使用类似于foreman的方法来管理这些流程。您可以在Procfile中定义流程类型和其他内容,并
resque
,sunspot
。当机器启动时,我手动运行以下命令:
rake sunspot:solr:start
/usr/local/bin/redis-server /usr/local/etc/redis.conf
rake resque:work QUEUE='*'
在后台运行这些守护程序有更好的做法吗?在后台运行这些任务时是否有任何副作用?您可以使用类似于
foreman
的方法来管理这些流程。您可以在Procfile
中定义流程类型和其他内容,并可以启动它们并对其执行任何操作 我的解决办法是使用上帝、卡皮斯特拉诺和任何时候的混合体。我遇到的一个具体问题是,我希望所有应用程序进程都以用户身份运行,因此initd脚本不是一个选项(这可以做到,但用户切换/环境加载会带来很大的痛苦)
上帝
基本思想是用于启动/重新启动/监视进程。上帝可能很难开始,但它非常强大:
- 单独运行god将启动所有进程(Web服务器、bg作业等)
- 它可以检测到进程崩溃并重新启动它
- 您可以对流程进行分组并批量重新启动它们(暂存、生产、后台、devops等)
@reboot
的特殊指令,允许您在服务器重新启动时运行特定命令:
@reboot /bin/bash -l -c 'cd /home/my_app && SERVER=true god -c production/current/config/app.god"
是一个gem,允许轻松管理crontab,包括生成reboot命令。虽然这对于实现我所描述的目标并不是绝对必要的,但它对capistrano集成非常有用
卡皮斯特拉诺
您不仅希望在服务器重新启动时启动进程,还希望在部署时重新启动它们。如果你的背景工作代码不是最新的,问题就会出现
允许轻松处理,只需在部署后capistrano任务中请求god重新启动整个组(如:god restart production
),即可无缝处理
无论何时,capistrano的集成都可以确保您的crontab始终是最新的,如果您更改了
config/schedule.rb
文件,就会对其进行更新。谢谢,我稍后会尝试