構成の環境変数 を使用するように切り替えましたが、非常にうまく機能します-capistranoを使用してタスクを展開または実行する必要がある場合を除きます。
Capistrano 3は、/usr/bin/env
というプレフィックスが付いた各コマンドを実行するようで、.bashrc
で設定した環境変数をすべて消去します。
[〜#〜] edit [〜#〜]-さらにいくつかの再調査を行うと、これは問題ではないかもしれませんが、問題はカピストラーノが実行されるためかもしれません非ログイン、非対話型シェルとして、.bashrc
または.bash_profile
をロードしません。しかし、まだ立ち往生しています。
Capistranoがタスクを実行するときに環境変数が設定されていることを確認する最良の方法は何でしょうか?
あなたは ENVIRONMENT VARIABLES
およびShell VARIABLES
SSHを起動すると、アプリは.bashrc
ファイル。これらはシェルの存続期間中のみ存在するため、ENV
varsほど使用しません。
ENV
varsを入れる方が良いかもしれません:
/etc/environment
このような:
export ENVIRONMENT_VAR=value
これにより、異なるシェルセッションだけでなく、システム全体で変数を使用できるようになります。
更新
やってみました
Capistrano:capセッション全体に環境変数を設定できますか?
set :default_env, {
'env_var1' => 'value1',
'env_var2' => 'value2'
}
これは回答済みですが、他の誰かが私と同じ状況にある場合に備えて、ここに残しておきます。
カピストラーノdoesload .bashrc
。ただし、ファイルの上部にあることに気付くと、次のようになります。
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
解決策は、この設定の上にセットアップを配置するだけで、Capistranoは私が望むように動作します。
この解決策は このGitHubの問題 にも記載されています。
問題の更新をデバッグするにはconfig/deploy.rb
簡単なタスク:
namespace :debug do
desc 'Print ENV variables'
task :env do
on roles(:app), in: :sequence, wait: 5 do
execute :printenv
end
end
end
cap staging debug:env
。 ENV
変数の効果的な構成を確認できるはずです。
ファイルの順序と名前は、ディストリビューションによって異なります。 Ubuntuでは、ソースシーケンスは次のとおりです。
/etc/environment
/etc/default/locale
/etc/bash.bashrc
~/.bashrc
いつ ~/.bashrc
には次のような最初の行が含まれます。その後のコードはソースされません。
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
capistrano
がENV変数をロードする方法を理解するには、このチャート( source )が役立つ場合があります。
おそらく~/.bash*
ファイルは、非対話型セッションのためにロードされません。
/etc/environment
ファイルに環境変数を設定して、システム内のすべてのユーザーとプロセスで使用できるようにする必要があります。 .bashrc
または.bash_profile
ファイルの環境変数は、シェルセッション内でのみ使用でき、自動的に生成されたプロセスおよびサービスでは使用できません。
capistrano-env_config
ファイルを変更するだけで機能するクラスター全体で環境変数を管理および同期するために、先ほどCapistranoライブラリ( /etc/environment
)を作成しました。使い方は簡単で、Herokuツールベルトを使用して環境変数を設定する方法に似ています。ここではいくつかの例を示します。
cap env:list
cap env:get[VARIABLE_NAME, VARIABLE_NAME, ...]
cap env:unset[VARIABLE_NAME, VARIABLE_NAME, ...]
cap env:set[VARIABLE_NAME=VALUE, VARIABLE_NAME=VALUE, ...]
cap env:sync
私が決めた解決策は:
リファレンス: http://en.wikibooks.org/wiki/OpenSSH/Client_Configuration_Files#.7E.2F.ssh.2Fenvironment
実際にはそれよりも悪いです。 Upstartを使用してPuma/Railsを管理しますが、そこにもenv変数を設定する必要があります。それで、数日間の実験の後、私は次の完全で恐ろしい解決策に行き着きました。
複数のファイル/テンプレートおよび複数の形式(エクスポートあり、エクスポートなし...)でenv変数の同じリストを維持するのは苦痛です。幸いなことに、Papipetを使用してノードの構成を管理することで、Capistranoを使用してデプロイすることで、わずかに簡単/信頼性が向上しました...
Linuxシェル、初期化、およびドットファイルのドメイン全体が本当に嫌いです。完全な再起動の時間です。