2011-11-24 174 views
1

我正在開發一個Rails v2.3應用程序。與MySQL v5.1數據庫上的Ubuntu機器。啓動與停止Nginx,MySQL服務器

我知道啓動命令,在命令行上停止NginxMySQL

但現在,我需要有以下過程在我的Rails應用程序:我rake任務的一個定義

stop Nginx --> stop(shut down) MySQL --> ... --> start MySQL --> start Nginx 

這意味着所有這些需要在Ruby腳本在定義耙任務我的Rails應用程序。

我不確定如何在我的rake任務上使ruby代碼運行上述過程(執行命令)?

回答

1

退房Ruby's Kernel module(它是內置的)。使用反引號,你可以運行命令來停止/啓動nginx和MySQL,甚至檢查它們的退出代碼,以確保它們正確執行(如果你的停止/啓動腳本支持退出代碼)。

例子:

# In your Rakefile 
namespace :servers do 
    task :stop do 
    nginx_stop_output = `service nginx stop` 
    if $?.exitstatus != 0 
     # handle shutdown failure 
    end 

    mysql_stop_output = `service mysql stop` 
    if $?.exitstatus != 0 
     # handle shutdown failure 
    end 
    end 

    task :start do 
    nginx_start_output = `service nginx start` 
    if $?.exitstatus != 0 
     # handle startup failure 
    end 

    mysql_start_output = `service mysql start` 
    if $?.exitstatus != 0 
     # handle startup failure 
    end 
    end 
end 

替換在自己的停止/啓動反引號中的命令。

然後,您可以使用rake servers:stoprake servers:start運行這些任務。

0

除非nginx不在端口80上運行,否則可能使用sudo。在這種情況下,你的選擇是:

  1. 修改/etc/sudoers允許用戶沒有被要求輸入密碼nginx的工作。

  2. 使用Open3#popen3代替「或」運行shell命令「system()」。如果Open3提示您輸入其他信息,則可以使用Open3與命令交互,以便在您的rake任務嘗試執行命令時鍵入sudo密碼。

0

使用gem systemu來執行命令。它比任何內置的Ruby命令行工具都要好。爲了照顧您的服務器環境,您可以查看像vlad這樣的部署框架。