デプロイや関連することに関しては、私は少し初心者なので、寛大にお願いします。
趣味のプロジェクト用にステージング サーバーを構築しています。そのためには、
- 複数の Ruby バージョンのサポート
- 複数の実行中のレール/その他のアプリケーションをサポート
- 複数のデータベースと関連ソフトウェアをサポート
また、その日が来たら、デプロイ スクリプトで本番環境にデプロイできるようにしたいと考えています。
この背景には、RVM、Capistrano-multistage、および Passenger Standalone の使用が必要です (もう 1 つのオプションは Mongrel ですが、本番環境で Passenger を使用したいので、ステージングでも Passenger を使用する方が安全だと考えました)。これらすべてにより、展開が少し面倒になります。
私は物事を非常にうまくまとめており、他のすべてはうまくいっているように見えますが、何らかの理由で、Capistrano からそうするように命じられたときに Passenger が始動に失敗します。ボックスに SSH 接続して自分でコマンドを入力すると、うまく動作します。どうしたの?
私を助けようとするあなたの努力を助けるために、ここに私の config/deploy.rb のコピーがあります
set :application, "Appname"
set :repository, "path-to-git-repo-over-ssh"
set :scm, :git
default_run_options[:pty] = true
set :rvm_ruby_string, ENV['GEM_HOME'].gsub(/.*\//,"")
set :rvm_install_ruby_params, '--1.9' # for jruby/rbx default to 1.9 mode
set :rvm_install_pkgs, %w[libyaml openssl] # package list from https://rvm.io/packages
set :rvm_install_ruby_params, '--with-opt-dir=/usr/local/rvm/usr' # package support
set :use_sudo, false
before 'deploy:setup', 'rvm:install_rvm' # install RVM
before 'deploy:setup', 'rvm:install_ruby' # install Ruby and create gemset
require "rvm/capistrano"
require "bundler/capistrano"
require 'sidekiq/capistrano'
set :deploy_via, :remote_cache
set :stages, %w(staging production)
set :default_stage, "staging"
require 'capistrano/ext/multistage'
set :rails_env, lambda { stage }
set :startcmd, lambda { "cd #{current_path} && bundle exec passenger start -d -p #{passenger_port} -e #{rails_env} --pid-file=#{current_path}/tmp/pids/passenger.#{passenger_port}.pid #{current_path}" }
namespace :deploy do
task :stop do
run("cd #{current_path} && bundle exec passenger stop -p #{passenger_port}")
end
task :restart do
run("cd #{current_path} && touch tmp/restart.txt")
end
task :start do
run("#{startcmd}")
end
end
after "deploy:update_code" do
run "(echo \"@reboot /bin/bash -l -c '#{startcmd}' >>log/boot.out 2>>log/boot.err # from capistrano \" && cat #{release_path}/crontab.#{stage}) | crontab -"
end
そして、ここに config/deploy/staging.rb があります
set :deploy_to, "/var/www/appname"
set :user, 'app-specific-user'
set :password, 'super-secret-password'
set :domain, '1.2.3.4'
server domain, :app, :web
role :db, domain, :primary => true
set :passenger_port, 1234