2013-02-02 70 views
0

我有以下代碼設置,它將成功列出正在爲Delayed_Job運行的不同服務pid。但是,我正在尋找一種可以在我看來稱爲這些操作的方式。第一個是檢查不同pid文件的函數,如果它們存在,它將返回true或false。在Rails視圖中啓動和停止命令行服務

在我看來,我有鏈接到當用戶點擊鏈接時被調用的函數。

但問題是,無論何時刷新此頁面,它都會執行方法並自動啓動/停止服務。

視圖

<% if delayed_job_service_running? %> 
    <em><b>Service Running</b></em> - 
    <%= link_to "Stop Service", delayed_job_stop %> 
    <% else %> 
    <em><b>Service Stopped</b></em> - 
    <%= link_to "Start Service", delayed_job_start %> 
    <% end %> 

幫手文件

def delayed_job_service_running? 
    files = Dir.glob("#{Rails.root}/pids/**/delayed_job*") 
    pids = [] 
    files.each do |file| 
     pids << `tail #{file}` 
    end 
    pids.empty? ? false : true 
end 

def delayed_job_start 
    `script/delayed_job -n 2 start` 
end 

def delayed_job_stop 
    `script/delayed_job stop` 
end 

回答

0

我想通了。相當簡單。訣竅是通過一個url使它成爲回調行爲。

視圖

link_to "stop service", "/admin/service/delayed_job_stop"

路由

match "admin/service/:string" => "pages#toggle_service", :as => "toggle_service"

控制器

def toggle_service 
    command = params[:string].to_s 
    if command == 'delayed_job_stop' 
     `script/delayed_job stop` 
    elsif command == 'delayed_job_start' 
     `script/delayed_job -n 2 start` 
    end  
    redirect_to :back 
    end