Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么';这是在Rails服务器运行时执行守护进程的更好方法_Ruby On Rails_Ruby_Resque_Sunspot - Fatal编程技术网

Ruby on 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中定义流程类型和其他内容,并

我的Rails应用程序中有一些宝石,比如
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等)
无论何时 您仍然必须在服务器重新启动时启动god。这样做的一个好方法是使用用户crontab。大多数cron实现都有一个名为
@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
文件,就会对其进行更新。

谢谢,我稍后会尝试