2013-01-15 54 views
3

我已经写了使用gem "mailman"放在“脚本/ mailman_server”如何在使用capistrano的rails服务器上运行脚本?

#!/usr/bin/env ruby 
    require "rubygems" 
    require "bundler/setup" 
    require "mailman" 

    #Mailman.config.logger = Logger.new("log/mailman.log") 
    Mailman.config.poll_interval = 3 
    Mailman.config.pop3 = { 
     server: 'server', port: 110, 
     username: "loginid", 
     password: "password" 
    } 

    Mailman::Application.run do 
     default do 
     p "Found a new message" 
     # 'perform some action here' 
     end 
    end 

它获取所有邮件从我的帐户,然后我做他们的处理名为mailman_server脚本。

我有我的deploy.rb文件

set :stages, %w(production)  #various environments 
load "deploy/assets"     #precompile all the css, js and images... before deployment.. 
require "bundler/capistrano"   # install all the new missing plugins... 
require 'delayed/recipes'    # load this for delayed job.. 
require 'capistrano/ext/multistage'  # deploy on all the servers.. 
require "rvm/capistrano"    # if you are using rvm on your server.. 
require './config/boot'   
require 'airbrake/capistrano'   # using airbrake in your application for crash notifications.. 

set :delayed_job_args, "-n 2"   # number of delayed job workers 


before "deploy:assets:symlink", "deploy:copy_database_file" 
before "deploy:update_code", "delayed_job:stop" # stop the previous deployed job workers... 
after "deploy:start", "delayed_job:start" #start the delayed job 
after "deploy:restart", "delayed_job:restart" # restart it.. 
after "deploy:update", "deploy:cleanup" #clean up temp files etc. 
set :rvm_ruby_string, '1.9.3'    # ruby version you are using... 
set :rvm_type, :user 

server "my_server_ip", :app, :web, :db, :primary => true 

set(:application) { "my_application_name" } 
set (:deploy_to) { "/home/user/#{application}/#{stage}" } 
set :user, 'user' 
set :keep_releases, 3 
set :repository, "[email protected]:my_random_git_repo_url" 
set :use_sudo, false 
set :scm, :git 
default_run_options[:pty] = true 
ssh_options[:forward_agent] = true 
set :deploy_via, :remote_cache 
set :git_shallow_clone, 1 
set :git_enable_submodules, 1 

namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 
    task :copy_database_file do 
    run "ln -sf #{shared_path}/database.yml #{release_path}/config/database.yml" 
    end 
end 

我想每次我部署到服务器时执行该脚本。当我部署代码时,我也需要停止这个脚本。

我无法弄清楚如何在服务器上使用capistrano启动或停止此脚本。

+0

如何手动停止脚本?只需在处理时按Ctrl + C?如果是这种情况,最好添加另一个脚本来终止由'mailman_server'启动的进程,并从'deploy'回调之前调用它。 –

+0

@Prakash是的,我这样做。因为我需要该脚本在服务器上运行,所以我使用了屏幕。 –

回答

0

你可以尝试的东西保存进程的PID对这样开始

run "cd #{deploy_to}/current; ./script/mailman_server &; echo &! > /var/run/mailman_server.pid" #untested 

run "kill `cat /var/run/mailman_server.pid`; rm /var/run/mailman_server.pid" 

停止,但我觉得你应该看看Foreman,它提供了方便的方法在开发中运行作业,并支持将作业导出为新手或inid.d脚本以供生产,因此您只需启动或停止相应的服务即可。

run "sudo /etc/init.d/mailman_server start" 
run "sudo /etc/init.d/mailman_server stop" 
相关问题