1

デプロイや関連することに関しては、私は少し初心者なので、寛大にお願いします。

趣味のプロジェクト用にステージング サーバーを構築しています。そのためには、

  • 複数の 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
4

1 に答える 1

0

まあ血まみれの地獄。完全に、私は削除しました

default_run_options[:pty] = true

ファイルから設定すると、魔法のように動作し始めました。今、誰かが理由を教えてくれるなら。

于 2012-12-09T12:15:04.167 に答える