2013-10-08 151 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

哈哈不夠公平 –

相關問題