Deployment 如何使用capistrano在rails服务器上运行脚本?
我已经编写了一个名为Deployment 如何使用capistrano在rails服务器上运行脚本?,deployment,ruby-on-rails-3.2,capistrano,Deployment,Ruby On Rails 3.2,Capistrano,我已经编写了一个名为mailman\u server的脚本,使用gem“mailman”放在“script/mailman\u server”中 #!/usr/bin/env ruby require "rubygems" require "bundler/setup" require "mailman" #Mailman.config.logger = Logger.new("log/mailman.log") Mailman.config.p
mailman\u server
的脚本,使用gem“mailman”
放在“script/mailman\u server”中
#!/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
它从我的帐户中提取所有电子邮件,然后我对它们进行处理
我的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, "git@bitbucket.org: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启动或停止此脚本。您可以尝试在启动时使用类似的内容保存进程的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"
但我认为您应该检查一下,它提供了在开发中运行作业的简便方法,并支持将作业导出到upstart或用于生产的inid.d脚本,所以您只需要启动或停止相应的服务
run "sudo /etc/init.d/mailman_server start"
run "sudo /etc/init.d/mailman_server stop"
如何手动停止脚本?只需在处理过程中按Ctrl+C?如果是这种情况,最好添加另一个脚本来终止由
mailman_server
启动的进程,并在部署回调之前从调用它。@Prakash是的,我这样做了。因为我需要在服务器上运行该脚本,所以我使用了屏幕。