{"id":264310,"date":"2015-08-26T13:14:02","date_gmt":"2015-08-26T09:14:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264310"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264310","title":{"rendered":"\u0414\u0435\u043f\u043b\u043e\u0439: Nginx, Puma \u0438 Mina"},"content":{"rendered":"<p>     \t\u0412 \u044d\u0442\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Rails \u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430 Nginx&#8217;\u0435 \u0441 Puma \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Mina.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0411\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u0412\u0430\u0441 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0432\u0441\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u043a\u0440\u043e\u043c\u0435 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 (\u042f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0441\u0442\u0430\u0432\u0438\u0442\u044c ruby \u0447\u0435\u0440\u0435\u0437 rbenv, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0434\u043b\u044f Mina \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0433\u043e.)<\/p>\n<p>  <b>Mina<\/b><br \/>  \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Mina \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0441\u0442\u0430\u0432\u0438\u043c \u0433\u0435\u043c \u0438 \u0432\u0441\u0435 (\u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432 Gemfile):<br \/>  <i>gem install mina<\/i><\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443: <br \/>  <i>mina init<\/i><\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b config\/deploy.rb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. <br \/>  \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e git \u0443 \u0412\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438\u043b\u0438 (\u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439) \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 Mina, \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0423 \u0412\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a\u0436\u0435 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043e \u043a\u0430\u043a\u0438\u0445 \u2014 \u043b\u0438\u0431\u043e \u043f\u0430\u043f\u043e\u043a\/\u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0442\u044c.<br \/>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">deploy.rb<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"ruby\">require 'mina\/bundler' require 'mina\/rails' require 'mina\/git' require 'mina\/rbenv'  lock '3.2.1'  set :user, 'admin' set :domain, '100.100.100.100' set :identity_file, &quot;#{ENV['HOME']}\/.ssh\/google&quot; set :deploy_to, '\/var\/www\/admin_app' set :app_path, lambda { &quot;#{deploy_to}\/#{current_path}&quot; } set :repository, 'https:\/\/admin:admin@github.com\/Admin_app.git' set :branch, 'master' set :forward_agent, true   set :rbenv_path, '\/home\/admin\/.rbenv\/' set :shared_paths, ['config\/database.yml', 'log']  task :environment do    invoke :'rbenv:load' end  task :setup =&gt; :environment do   queue! %[mkdir -p &quot;#{deploy_to}\/#{shared_path}\/log&quot;]   queue! %[chmod g+rx,u+rwx &quot;#{deploy_to}\/#{shared_path}\/log&quot;]    queue! %[mkdir -p &quot;#{deploy_to}\/#{shared_path}\/config&quot;]   queue! %[chmod g+rx,u+rwx &quot;#{deploy_to}\/#{shared_path}\/config&quot;]    queue! %[touch &quot;#{deploy_to}\/#{shared_path}\/config\/database.yml&quot;]   queue  %[echo &quot;-----&gt; Be sure to edit '#{deploy_to}\/#{shared_path}\/config\/database.yml'.&quot;] end  desc &quot;Deploys the current version to the server.&quot; task :deploy =&gt; :environment do   to :before_hook do     # Put things to run locally before ssh   end   deploy do     invoke :'git:clone'     invoke :'server:stop_server'     invoke :'deploy:link_shared_paths'     invoke :'bundle:install'     invoke :'rails:db_migrate'     invoke :'rails:assets_precompile'     invoke :'deploy:cleanup'      to :launch do       queue &quot;mkdir -p #{deploy_to}\/#{current_path}\/tmp\/&quot;       queue &quot;touch #{deploy_to}\/#{current_path}\/tmp\/restart.txt&quot;       invoke :'server:start_server'     end   end end  namespace :server do   desc 'Stop server'   task :stop_server do     queue 'echo &quot;-----&gt; Stop Server&quot;'     queue 'kill -9 $(lsof -i :3000 -t) || true'     queue '[ -f \/var\/www\/admin\/admin_app.pid ] && rm \/var\/www\/admin\/admin_app.pid || echo &quot;File admin_app.pid not exist&quot;'   end    desc 'Start server'   task :start_server do     queue 'echo &quot;-----&gt; Start Server&quot;'     queue! 'rails s -b 0.0.0.0 -e production -P \/var\/www\/admin\/admin_app.pid -d &'   end end <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0412\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0412\u0430\u0448 \u0444\u0430\u0439\u043b deploy.rb \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043f\u0440\u0430\u0432\u0434\u0443 \u0438 \u0432\u0440\u043e\u0434\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443: <br \/>  <i>mina setup<\/i><\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0430\u043f\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f(\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u044d\u0442\u043e \/var\/www\/admin_app). <br \/>  \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0444\u0430\u0439\u043b database.yml \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u043e\u043d\u0430 \u0432\u0435\u0440\u043d\u0430. \u0424\u0430\u0439\u043b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \/var\/www\/myapp\/shared\/config. <br \/>  \u0414\u0430\u043b\u0435\u0435 \u0432\u0432\u043e\u0434\u0438\u043c: <br \/>  <i>mina deploy<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0412\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0412\u0430\u0441 \u043f\u043e \u043f\u0443\u0442\u0438: \/var\/www\/admin_app. <\/p>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0434\u0435\u043f\u043b\u043e\u0439, \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f task&#8217;\u0438 \u0432 deploy.rb \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 :deploy =&gt; :environment. <br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0434\u0432\u0430 task&#8217;\u0430, \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 resque \u2014 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Task&#39;\u0438 \u0434\u043b\u044f resque<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"ruby\">desc 'Start resque-workers'    task :start_workers do     queue 'echo &quot;-----&gt; Start resque-workers&quot;'     queue &quot;cd #{app_path} && RAILS_ENV=#{stage} && touch resque.pid&quot;     queue &quot;cd #{app_path} &&  bundle exec rake resque:work QUEUE=contacts_adder BACKGROUND=yes TERM_CHILD=1&quot;     queue &quot;cd #{app_path} &&  bundle exec rake resque:work QUEUE=photo_downloader BACKGROUND=yes TERM_CHILD=1&quot;     # \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e     queue 'echo &quot;-----&gt; Start resque-scheduler&quot;'     queue &quot;cd #{app_path} && rake resque:scheduler BACKGROUND=yes VERBOSE=yes RAILS_ENV=production &quot;   end    desc 'Stop resque-workers'   task :stop_workers do     queue 'echo &quot;-----&gt; Stop resque-workers&quot;'     queue 'kill -9 `ps aux | grep [r]esque | grep -v grep | cut -c 10-16` || true'   end <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 task&#8217;\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<br \/>  <i>mina tasks<\/i><\/p>\n<p>  <b>Puma<\/b><br \/>  \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Puma \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430: \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 puma.rb \u0438 shell \u2014 \u0441\u043a\u0440\u0438\u043f\u0442, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\/\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\/\u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430 Puma. <\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b puma.rb \u0432 config\/. \u0418 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">puma.rb<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"ruby\">#!\/usr\/bin\/env puma environment ENV['RAILS_ENV'] || 'production' pidfile &quot;\/var\/www\/admin\/current\/shared\/tmp\/pids\/puma.pid&quot; stdout_redirect &quot;\/var\/www\/admin\/current\/shared\/tmp\/log\/stdout&quot;, &quot;\/var\/www\/admin\/current\/shared\/tmp\/log\/stderr&quot; threads 2, 16 workers 2 bind &quot;unix:\/\/\/var\/www\/admin\/current\/shared\/tmp\/sockets\/puma.sock&quot; daemonize true <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u043f\u0443\u0442\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432! <\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b bin\/puma.sh. \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0435\u0433\u043e:   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">puma.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#! \/bin\/sh PUMA_CONFIG_FILE=\/var\/www\/admin\/current\/config\/puma.rb PUMA_PID_FILE=\/var\/www\/admin\/current\/shared\/tmp\/pids\/puma.pid PUMA_SOCKET=\/var\/www\/admin\/current\/shared\/tmp\/sockets\/puma.sock  # check if puma process is running puma_is_running() {   if [ -e $PUMA_SOCKET ] ; then     if [ -r $PUMA_PID_FILE ] ; then        if ps -p `cat $PUMA_PID_FILE` &gt; \/dev\/null; then         return 0       else         echo &quot;No puma process found&quot;       fi     else       echo &quot;No puma pid file found&quot;     fi   else     echo &quot;No puma socket found&quot;   fi    return 1 }  case &quot;$1&quot; in   start)     echo &quot;Starting puma...&quot;       if [ -e $PUMA_SOCKET  ] ; then # if socket exists         rm -f $PUMA_SOCKET         echo &quot;removed $PUMA_SOCKET&quot;       fi       if [ -e $PUMA_CONFIG_FILE ] ; then         echo &quot;config&quot;         bundle exec puma -C $PUMA_CONFIG_FILE       else         echo &quot;socket&quot;         bundle exec puma --daemon --bind unix:\/\/$PUMA_SOCKET --pidfile $PUMA_PID_FILE       fi      echo &quot;done&quot;     ;;    stop)     echo &quot;Stopping puma...&quot;       kill -s SIGTERM `cat $PUMA_PID_FILE`       rm -f $PUMA_PID_FILE       rm -f $PUMA_SOCKET      echo &quot;done&quot;     ;;    restart)     if puma_is_running ; then       echo &quot;Hot-restarting puma...&quot;       kill -s SIGUSR2 `cat $PUMA_PID_FILE`        echo &quot;Doublechecking the process restart...&quot;       sleep 5       if puma_is_running ; then         echo &quot;done&quot;         exit 0       else         echo &quot;Puma restart failed :\/&quot;         exit 1       fi     fi      echo &quot;Trying cold reboot&quot;     bin\/puma.sh start     ;;    *)     echo &quot;Usage: script\/puma.sh {start|stop|restart}&quot; &gt;&2     ;; esac <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b deploy.rb \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 Puma:   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Task&#39;\u0438 \u0434\u043b\u044f Puma<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"ruby\"> namespace :puma do   desc 'Start the application'   task :start do     queue 'echo &quot;-----&gt; Start Puma&quot;'     queue &quot;cd #{app_path} && RAILS_ENV=#{stage} && bin\/puma.sh start&quot; , :pty =&gt; false   end    desc 'Stop the application'   task :stop do     queue 'echo &quot;-----&gt; Stop Puma&quot;'     queue &quot;cd #{app_path} && RAILS_ENV=#{stage} && bin\/puma.sh stop&quot;   end    desc 'Restart the application'   task :restart do     queue 'echo &quot;-----&gt; Restart Puma&quot;'     queue &quot;cd #{app_path} && RAILS_ENV=#{stage} && bin\/puma.sh restart&quot;   end end <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 \u00abto :launch do\u00bb(\u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430) \u043f\u0440\u043e\u043f\u0438\u0448\u0435\u043c:   <\/p>\n<pre><code class=\"ruby\">invoke :'puma:restart' <\/code><\/pre>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0430\u0439\u043b puma.sh \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c: <br \/>  <i>chmod +x bin\/puma.sh<\/i><\/p>\n<p>  \u0418 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0434\u0435\u043f\u043b\u043e\u0439:<br \/>  <i>mina deploy<\/i><\/p>\n<p>  <b>Nginx<\/b><br \/>  Nginx \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430:<br \/>  <i>sudo apt-get install nginx<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a nginx \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c default site. <br \/>  <i>sudo rm \/etc\/nginx\/conf.d\/sites-enabled\/default<\/i><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \/etc\/nginx\/sites-available\/my_app.conf:   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u043d\u0444\u0438\u0433 nginx&#39;a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">upstream my_app {           server unix:\/\/\/var\/www\/admin\/current\/shared\/tmp\/sockets\/puma.sock;         } server {     listen 80;     server_name 100.100.100.100; # change to match your URL     root \/var\/www\/admin\/current\/public;      location \/ {         root \/var\/www\/admin\/current\/public;         try_files $uri @app;         gzip_static on;         expires max;         add_header Cache-Control public;     }      location @app {      proxy_pass        http:\/\/my_app;      proxy_set_header  X-Real-IP  $remote_addr;      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;      proxy_set_header  X-Forwarded-Proto http;      proxy_set_header  Host $http_host;      proxy_redirect    off;      proxy_next_upstream error timeout invalid_header http_502;     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043a\u0430\u043a\u0438\u0435 \u2014 \u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 \/etc\/nginx\/nginx.conf. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (server {}), \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 http(http{}). <\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0443: <br \/>  <i>sudo ln -sf \/etc\/nginx\/sites-available\/my_app.conf \/etc\/nginx\/sites-enabled\/my_app.conf<\/i><\/p>\n<p>  \u0418 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a nginx&#8217;a:<br \/>  <i>sudo service nginx restart<\/i><\/p>\n<p>  \u0412\u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0432\u0441\u0435. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u043f\u043b\u043e\u044f \ud83d\ude42     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/265459\/\"> http:\/\/habrahabr.ru\/post\/265459\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u0412 \u044d\u0442\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 Rails \u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430 Nginx&#8217;\u0435 \u0441 Puma \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Mina.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-264310","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=264310"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264310\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}