2013-10-08 87 views
2

我一直在思考这个问题,并且找不到任何东西,所以我打算假设我遇到了XY问题。如何在服务器启动时运行capistrano任务?

让我来描述一下我的问题,这听起来很普遍。

我们使用capistrano来部署我们的网络应用和数据库。相关部分是我们有专门的服务器用于延迟作业,我们使用capistrano来部署它并启动/重新启动进程。这是一个自定义数量的工人,有两个不同的Gemfile s和3个队列。

我想要做的事情是在服务器重新启动时启动它们,或者更多地在服务器克隆+启动时启动它们。

我试过从服务器本身调用cap production delayed_job:custom_start ..没有工作。 (这是我的非XY问题调整问题的核心)。不知道它甚至是有道理的。但我想知道这是否可能。 custom_start是启动我们工作人员的任务。

或者我想抽象的代码为rake任务或脚本或东西,从两个capistrano何地,我需要将它添加到开始启动时调用它。这是否更有意义?

编辑:刚发现this post ..劝阻..

附:我只是想澄清,当我说服务器我的意思是我的机器/ EC2实例,而不是我的Web应用程序重新启动。

回答

0

我最终将延迟的作业相关的逻辑移动到它自己的接受开始/停止的脚本,并从capistrano委派给这个脚本。这意味着我可以将此脚本添加到我的rc.local中。

0

我詹金斯部署作业是用直接的任务开发商散落可致电如盖开发的应用程序:fetch_logs,帽QA sanitize_environment等

Capistrano酒店的这个特点是很简单的验证。

我猜你想要做的是使用Capistrano来设置rc.d文件。是的,你可以做到这一点。这个时候你应该使用厨师/傀儡?考虑。 Scalr/Rightscale也很值得关注。

您可以为所有工作变量添加一个bash脚本作为.erb模板,然后将脚本上传到deploy_to目录。最后,您可以设置另一个任务(#{sudo})将rc.d封装器注入到rc.d中。或者你而不是rc.d封装给你bash脚本,只需从rc.d-local调用bash脚本即可。你可以使用sed来追加到rc.d-local。

+0

我试图做的是给rc本地添加一个capistrano任务,但是谢谢 –

+0

将一个capistrano任务添加到rc.local可能会让每个服务器都登录到role:app中的所有其他服务器并执行一些操作。我想你可以把它包装在run_locally命令中。重点在于它不是rc.local的工具。你必须确定这个盒子是分配给rvm的,capistrano gem是正确安装的,/ etc/profile是正确的(rc.local不能用配置文件运行)并且调用rc.local的全部行(/ usr/bin /帽本地start_server)或一些这样的。方式黑客和任何运营类型的人会射击你。 – Electrawn

+0

哈哈不够公平 –

相关问题