0

いくつかのステージ固有の capistrano 変数を定義しますが、デフォルト値をオーバーライドしません。

構成/デプロイ/staging.rb:

set :user, 'ec2-user'
set :rails_env, 'staging'

set :domain,      'test.etask.me'

config/deploy.rb:

set :application, 'etask'

set :stages, %w(production staging)
set :default_stage, "staging"
require 'capistrano/ext/multistage'
set :user, 'ec2-user'

set(:unicorn_env) { rails_env }

role(:web) { domain }
role(:app) { domain }
role(:db, :primary => true) { domain }

set(:deploy_to)    { "/home/#{user}/#{application}/#{fetch :rails_env}" }
set(:current_path) { File.join(deploy_to, current_dir) }

default_run_options[:pty] = false

require 'rvm/capistrano'
require 'bundler/capistrano'

set :using_rvm, true
set :rvm_ruby_string, '1.9.3'
set :rvm_type, :user

set :repository,  'git@bitbucket.org:adaptiveservices/etask-website.git'
set :scm,         :git
set :branch,      'master'
set :git_shallow_clone, 1
set :keep_releases, 3

set :use_sudo,    false
set :deploy_via,  :remote_cache

set :git_enable_submodules, 1

cap deploy の出力:

triggering load callbacks
  * 2013-10-15 15:44:25 executing `staging'
    triggering start callbacks for `deploy'
  * 2013-10-15 15:44:25 executing `multistage:ensure'
  * 2013-10-15 15:44:25 executing `deploy'
  * 2013-10-15 15:44:25 executing `deploy:update'
 ** transaction: start
  * 2013-10-15 15:44:25 executing `deploy:update_code'
    updating the cached checkout on all servers
    executing locally: "git ls-remote git@bitbucket.org:adaptiveservices/etask-website.git master"
    command finished in 2270ms
  * executing "if [ -d /home/ec2-user/etask/production/shared/cached-copy ]; then cd /home/ec2-user/etask/production/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q
 --hard 88e8556a3cce96e77d51a40b96f2dcd1437c939a && git submodule -q init && git submodule -q sync && export GIT_RECURSIVE=$([ ! \"`git --version`\" \\< \"git version 1.6.5\" ] && echo --recursive) && git
 submodule -q update --init $GIT_RECURSIVE && git clean -q -d -x -f; else git clone -q -b master --depth 1 git@bitbucket.org:adaptiveservices/etask-website.git /home/ec2-user/etask/production/shared/cache
d-copy && cd /home/ec2-user/etask/production/shared/cached-copy && git checkout -q -b deploy 88e8556a3cce96e77d51a40b96f2dcd1437c939a && git submodule -q init && git submodule -q sync && export GIT_RECURS
IVE=$([ ! \"`git --version`\" \\< \"git version 1.6.5\" ] && echo --recursive) && git submodule -q update --init $GIT_RECURSIVE; fi"

ご覧のとおり、capistrano はそれが実稼働環境であると考えています (cd /home/ec2-user/etask/ production /shared/cached-copy を見てください)。deploy/staging.rb で定義されているのではなく、デフォルト値を使用します。ユーザー変数の値を確認しても、 deploy/staging.rb 内にユーザーを設定したにもかかわらず、エラーがスローされます (値が定義されていません)。

capistrano wikiで説明されているように、すべてのことを行いました。他の関連する投稿をたくさん調べましたが、私の問題は解決しません。

4

2 に答える 2

1

最後に、それを機能させるためのハックを紹介しました。交換しました

set :stages, %w(production staging)
set :default_stage, "staging"
require 'capistrano/ext/multistage'

set :stages, %w(production staging)
set :stage, ARGV.select { |arg| stages.include? arg }.first || 'staging'
load "config/deploy/#{stage}.rb"

これも 3 行かかりますが、機能します。capistrano 3.x に移行するときに、そのコードを取り除くことを願っています。

于 2013-10-15T15:07:00.763 に答える
0

これrequire 'capistrano/ext/multistage' を deploy.rb の一番下に移動します:

そして実行
cap staging deploy(ではないcap deploy staging)ステージング環境からオーバーライドされたパラメータを使用する方法を試してください。

于 2013-10-15T13:04:20.540 に答える