0

ステージングと本番環境にデプロイするためにcapistranoをセットアップしました。正直なところ、私はcapistranoにあまり精通していません。これは、標準のcapistrano(マルチホストではない)を使用して行いました。次のような変数を渡します。

cap production deploy
cap staging deploy

しかし、私db:migrateは正しく機能していません。

猫のステージング展開で:私はshisを取得します:

  * executing "cd /data/sites/staging.domain.com/apps/d-rails/releases/20121212203353 && bundle exec rake RAILS_ENV=production  db:migrate"

そして、希望します(サブプロダクション->ステージングのみ):

* executing "cd /data/sites/staging.domain.com/apps/d-rails/releases/20121212203353 && bundle exec rake RAILS_ENV=staging  db:migrate"

これをどのように設定しますか?または、修正するために最初に何を見る必要がありますか?

私のdeploy.rbには、次のものがあります。

task :production do
  set :deploy_to, "/data/sites/domain.com/apps/#{application}"
end

task :staging do
  set :deploy_to, "/data/sites/staging.domain.com/apps/#{application}"
  after 'deploy:update_code' do
    run "cd #{release_path}; RAILS_ENV=staging bundle exec rake assets:precompile --trace"
  end
end

事前にt​​hx

4

1 に答える 1

4

カピストラーノのマルチステージ機能を使った方が使いやすいと思います。本番環境とステージング環境のセットアップは次のとおりです。

config/deploy.rb

require 'capistrano/ext/multistage'
require 'bundler/capistrano'

set :application, "yourappname"
set :repository,  "git@yourhost.com:yourrepo.git"
set :stages, %w(production staging)
set :default_stage, "staging" # running "cap deploy" deploys to staging, "cap production deploy" deploys to production
set :user, "deploy" # the ssh user which does the deployment on the server
set :use_sudo, false
set :scm, :git

set :default_environment, {
  'PATH' => "/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/local/rbenv/versions/1.9.3-p327/bin:$PATH"
}
after "deploy:update_code", "deploy:migrate"

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

展開に追加のset :default_environmentパスを含める必要がある場合に必要です (カピストラーノがサーバーにログインするときに通常の.bashrcorが含まれていないため).bash_profile

構成/デプロイ/production.rb

set :rails_env, "production"
set :deploy_to, "/var/www/your_production_folder"

role :web, "example.com"                          # Your HTTP server, Apache/etc
role :app, "example.com"                          # This may be the same as your `Web` server
role :db,  "example.com", :primary => true # This is where Rails migrations will run

構成/デプロイ/staging.rb

set :rails_env, "staging"
set :deploy_to, "/var/www/your_staging_folder"

role :web, "example.com"                          # Your HTTP server, Apache/etc
role :app, "example.com"                          # This may be the same as your `Web` server
role :db,  "example.com", :primary => true # This is where Rails migrations will run

VirtualHost 構成に RailsEnv 変数を必ず含めてください。Apache を使用している場合、これは次のようになります。

<VirtualHost *:80>
  ServerName staging.example.com
  ServerAlias www.staging.example.com
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /var/www/your_staging_folder/current/public
  <Directory /var/www/your_staging_folder/current/public>
    # This relaxes Apache security settings.
    AllowOverride all
    # MultiViews must be turned off.
    Options -MultiViews
    #AuthName "Staging Server"
    #AuthType Basic
    #AuthUserFile /var/staging.htpasswd
    #require valid-user
  </Directory>
  RailsEnv staging
</VirtualHost>

ステージング環境をパスワードで保護する場合は、コメント解除されたAuthName,AuthTypeを使用します。このような構成が完了したら、展開を でテストしますcap deploy:setup。これにより、フォルダー構造が設定されます。Acap deploy:coldは、アプリケーションのすべてのファイルをディレクトリにコピーします。Acap deploy:migrateはデータベースを移行します。ただし、実行できるのはcap deploy.

もう 1 つは、Rails アプリでステージング環境をセットアップする必要があることです。config/environments/production.rbこれを行うには、 (またはお好みで development.rb) をコピーしてstaging.rb、必要に応じて構成を調整します。

何も忘れていないことを願っています ;) さらに問題がありましたらお知らせください。

于 2012-12-12T21:55:09.497 に答える