-
-
Save liushooter/a92693d2986760e0f489 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DEPLOY_PATH = { | |
:staging => 'app-name', | |
:production => 'app-name', | |
:uat => 'app-name-uat' | |
} | |
SERVICES = %w(app-name) | |
ENVIRONMENTS = [:staging, :uat] #这是测试环境的配置,对于产品环境可以改成[:production] | |
TIMEOUT = 30.seconds | |
LONG_TIMEOUT = 60.seconds | |
STOP_PAUSE = 10.seconds | |
CHAIN_PAUSE = 05.seconds | |
# 默认参数设置,默认使用dotenv | |
def default_options | |
{ | |
dotenv: true, | |
} | |
end | |
def service_name(app) | |
app.gsub('-', '_') | |
end | |
# 集成.env的环境变量配置 | |
def load_env(environment = :staging ) | |
File.open("/opt/#{DEPLOY_PATH[environment]}/.env", 'rb').each_line do |line| | |
result = line.split('=') | |
#设置全局性的环境变量 | |
env result[0] => result[1].chop if result.length > 1 | |
end | |
# unicorn requires to be `ruby` in path (for soft restart) | |
env "PATH" => "/usr/local/bin/ruby:#{ENV['PATH']}" | |
end | |
def define_application(app, env, options = default_options) | |
app_name = "#{app}#{'-uat' if env==:uat}" | |
Eye.application app_name do | |
load_env(env) if options[:dotenv] | |
env('RAILS_ENV' => env.to_s) if options[:env] | |
group "#{app_name}-web" do | |
chain :grace => CHAIN_PAUSE | |
process "#{app_name}-web-1" do | |
working_dir "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/current" | |
pid_file "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/tmp/pids/unicorn.pid" | |
start_command "bundle exec unicorn -E #{env} -Dc ./config/unicorn.rb" | |
# 对于unicorn使用-D参数设置deamon | |
stop_signals [:QUIT, STOP_PAUSE, :TERM, STOP_PAUSE, :KILL] | |
# 没有downtime重启unicorn,产生新的master和worker后,自动杀掉老的master | |
restart_command "kill -USR2 {PID}" | |
start_timeout LONG_TIMEOUT | |
restart_grace LONG_TIMEOUT | |
stop_timeout TIMEOUT | |
monitor_children do | |
stop_command "kill -QUIT {PID}" | |
end | |
end | |
end | |
group "#{app_name}-worker" do | |
chain :grace => CHAIN_PAUSE | |
process "#{app_name}-worker-1" do | |
working_dir "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/current" | |
pid_file "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/tmp/pids/sidekiq.pid" | |
daemonize true | |
start_command "bundle exec sidekiq -e #{env}" | |
stop_signals [:QUIT, STOP_PAUSE, :TERM, STOP_PAUSE, :KILL] | |
start_timeout TIMEOUT | |
restart_timeout TIMEOUT | |
stop_timeout TIMEOUT | |
monitor_children do | |
stop_command "kill -QUIT {PID}" | |
end | |
end | |
end | |
end | |
end | |
Eye.config do | |
logger "/tmp/eye.log" | |
end | |
SERVICES.each do |service| | |
ENVIRONMENTS.each do |environment| | |
define_application(service, environment) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment