# ... gem 'puma', group: :production # ...
gem 'mina', group: :development
mina init
require 'mina/bundler' require 'mina/rails' require 'mina/git' set :domain, 'awesome_address' set :user, 'webapp' set :deploy_to, '/home/webapp/awesome' set :repository, 'https://github.com/awesome_user/awesome.git' set :branch, 'master' set :shared_paths, ['config/database.yml', 'config/secrets.yml', 'config/puma.rb', 'log'] task :setup => :environment do queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/puma"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/puma"] queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"] queue! %[touch "#{deploy_to}/#{shared_path}/config/secrets.yml"] queue! %[touch "#{deploy_to}/#{shared_path}/config/puma.rb"] queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml', 'secrets.yml' and puma.rb."] end desc "Deploys the current version to the server." task :deploy => :environment do deploy do # Put things that will set up an empty directory into a fully set-up # instance of your project. invoke :'git:clone' invoke :'deploy:link_shared_paths' invoke :'bundle:install' #invoke :'rails:db_migrate' #invoke :'rails:assets_precompile' #invoke :'deploy:cleanup' end end
mina setup
environment "production" bind "unix:///home/webapp/awesome/shared/puma/puma.sock" pidfile "/home/webapp/awesome/shared/puma/puma.pid" state_path "/home/webapp/awesome/shared/puma/puma.state" activate_control_app
mina deploy
upstream awesome { server unix:///home/webapp/awesome/shared/puma/puma.sock; } server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /home/webapp/awesome/current/public; server_name localhost; location / { proxy_pass http://awesome; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~* ^/assets/ { # Per RFC2616 - 1 year maximum expiry expires 1y; add_header Cache-Control public; # Some browsers still send conditional-GET requests if there's a # Last-Modified header or an ETag header even if they haven't # reached the expiry date sent in the Expires header. add_header Last-Modified ""; add_header ETag ""; break; } }
cd /etc/nginx/sites-enabled/ ln -s ../sites-available/awesome awesome
service nginx restart
cd /home/webapp/awesome/current bash --login rvm use ruby-2.2.1 bundle install --without development:test --path ./vendor/bundle --deployment RAILS_ENV=production bundle exec rake db:migrate RAILS_ENV=production bundle exec rake assets:precompile
bundle exec puma -C config/puma.rb
rvm alias create awesome ruby-2.2.1@default
description "Awesome puma service" # This starts upon bootup and stops on shutdown start on runlevel [2345] stop on runlevel [06] setuid webapp setgid webapp respawn respawn limit 3 30 script cd /home/webapp/awesome/current /home/webapp/.rvm/wrappers/awesome/bundle exec puma -C config/puma.rb end script
start awesome stop awesome restart awesome status awesome
visudo
webapp ALL=(ALL) NOPASSWD: /sbin/start awesome, /sbin/stop awesome, /sbin/restart awesome, /sbin/status awesome
set :bundle_bin, '/home/webapp/.rvm/wrappers/awesome/bundle'
desc "Restart the puma web server." task :restart do queue 'sudo restart awesome' end
require 'mina/bundler' require 'mina/rails' require 'mina/git' set :domain, 'awesome_address' set :user, 'webapp' set :deploy_to, '/home/webapp/awesome' set :repository, 'https://github.com/awesome_user/awesome.git' set :branch, 'master' set :bundle_bin, '/home/webapp/.rvm/wrappers/awesome/bundle' set :shared_paths, ['config/database.yml', 'config/secrets.yml', 'config/puma.rb', 'log'] task :setup => :environment do queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/puma"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/puma"] queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"] queue! %[touch "#{deploy_to}/#{shared_path}/config/secrets.yml"] queue! %[touch "#{deploy_to}/#{shared_path}/config/puma.rb"] queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml', 'secrets.yml' and puma.rb."] end desc "Deploys the current version to the server." task :deploy => :environment do deploy do # Put things that will set up an empty directory into a fully set-up # instance of your project. invoke :'git:clone' invoke :'deploy:link_shared_paths' invoke :'bundle:install' invoke :'rails:db_migrate' invoke :'rails:assets_precompile' invoke :'deploy:cleanup' to :launch do invoke :'restart' end end end desc "Restart the puma web server." task :restart do queue 'sudo restart awesome' end
mina deploy
# ... # Rvm ruby version and gemset rvm = { ruby_version: 'ruby-2.2.1', ruby_gemset: 'default' } task :environment do invoke :"rvm:use[#{rvm[:ruby_version]}@#{rvm[:ruby_gemset]}]" end # ... desc "Creates appropriate .ruby-version and .ruby-gemset files." task :'rvm:dot_files' do queue! %[echo "#{rvm[:ruby_version]}" > .ruby-version] queue! %[echo "#{rvm[:ruby_gemset]}" > .ruby-gemset] end task :setup => :environment do # ... end task :deploy => :environment do deploy do invoke :'git:clone' invoke :'rvm:dot_files' # ... end end # ...
Source: https://habr.com/ru/post/265599/
All Articles