Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. DEPLOY_PATH = {
  2. :staging => 'app-name',
  3. :production => 'app-name',
  4. :uat => 'app-name-uat'
  5. }
  6.  
  7. SERVICES = %w(app-name)
  8. ENVIRONMENTS = [:staging, :uat] #这是测试环境的配置,对于产品环境可以改成[:production]
  9. TIMEOUT = 30.seconds
  10. LONG_TIMEOUT = 60.seconds
  11. STOP_PAUSE = 10.seconds
  12. CHAIN_PAUSE = 05.seconds
  13.  
  14. # 默认参数设置,默认使用dotenv
  15. def default_options
  16. {
  17. dotenv: true,
  18. }
  19. end
  20.  
  21. def service_name(app)
  22. app.gsub('-', '_')
  23. end
  24.  
  25. # 集成.env的环境变量配置
  26. def load_env(environment = :staging )
  27. File.open("/opt/#{DEPLOY_PATH[environment]}/.env", 'rb').each_line do |line|
  28. result = line.split('=')
  29. #设置全局性的环境变量
  30. env result[0] => result[1].chop if result.length > 1
  31. end
  32.  
  33. # unicorn requires to be `ruby` in path (for soft restart)
  34. env "PATH" => "/usr/local/bin/ruby:#{ENV['PATH']}"
  35. end
  36.  
  37. def define_application(app, env, options = default_options)
  38. app_name = "#{app}#{'-uat' if env==:uat}"
  39. Eye.application app_name do
  40. load_env(env) if options[:dotenv]
  41.  
  42. env('RAILS_ENV' => env.to_s) if options[:env]
  43.  
  44. group "#{app_name}-web" do
  45. chain :grace => CHAIN_PAUSE
  46.  
  47. process "#{app_name}-web-1" do
  48. working_dir "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/current"
  49. pid_file "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/tmp/pids/unicorn.pid"
  50.  
  51. start_command "bundle exec unicorn -E #{env} -Dc ./config/unicorn.rb"
  52. # 对于unicorn使用-D参数设置deamon
  53. stop_signals [:QUIT, STOP_PAUSE, :TERM, STOP_PAUSE, :KILL]
  54.  
  55. # 没有downtime重启unicorn,产生新的master和worker后,自动杀掉老的master
  56. restart_command "kill -USR2 {PID}"
  57.  
  58. start_timeout LONG_TIMEOUT
  59. restart_grace LONG_TIMEOUT
  60. stop_timeout TIMEOUT
  61.  
  62. monitor_children do
  63. stop_command "kill -QUIT {PID}"
  64. end
  65. end
  66. end
  67.  
  68. group "#{app_name}-worker" do
  69. chain :grace => CHAIN_PAUSE
  70.  
  71. process "#{app_name}-worker-1" do
  72. working_dir "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/current"
  73. pid_file "/opt/#{DEPLOY_PATH[env]}/#{service_name(app)}/tmp/pids/sidekiq.pid"
  74.  
  75. daemonize true
  76.  
  77. start_command "bundle exec sidekiq -e #{env}"
  78. stop_signals [:QUIT, STOP_PAUSE, :TERM, STOP_PAUSE, :KILL]
  79.  
  80. start_timeout TIMEOUT
  81. restart_timeout TIMEOUT
  82. stop_timeout TIMEOUT
  83.  
  84. monitor_children do
  85. stop_command "kill -QUIT {PID}"
  86. end
  87. end
  88. end
  89. end
  90. end
  91.  
  92. Eye.config do
  93. logger "/tmp/eye.log"
  94. end
  95.  
  96. SERVICES.each do |service|
  97. ENVIRONMENTS.each do |environment|
  98. define_application(service, environment)
  99. end
  100. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement