2016-07-19 9 views
1

Ubuntu(14.02)システムでPassenger(5.0.28)+ Apache(2.4.7)、rbenvで管理されているruby(2.3.0)でレール(4.2)アプリケーションを実行しています。私はCapistrano(3.4.0)と一緒に展開します。Capistrano導入時の環境変数へのアクセス方法は?

私の環境変数はすべて、非常に単純なprofile.dスクリプトで設定されています。

#!/bin/sh 
export VAR1=VAL1 
export VAR2=VAL2 

これは魅力的です。私のアプリENVにはすべて正しい変数があり、Secrets.ymlは適切に設定されています... sshを使ってCapistranoを使用して配備する場合を除き、すべてが機能します。

私はrelavantだと思うことを、次のしている私の deploy.rb

:\サーバーの設定ではない私は、なぜ私のENV変数を見つけ出すように見えることはできません私の強力なポイント非常に限られたとsshさ

set :ssh_options, { 
forward_agent: true, 
paranoid: true, 
keys: "~/.ssh/id_rsa.pub" 
} 

カピストラーノドキュメントカピストラーノは見ていない。デプロイメントフロー中にputs ENV.inspectを実行すると、"TERM_PROGRAM"=>"Apple_Terminal"やローカルマシンのユーザー情報などになります。なぜカピストラノは遠隔地の環境を使用していないのですか?この問題を解決するために、サーバーサイドまたはデプロイスクリプトの設定をどのように修正できますか?

ありがとうございました。

答えて

3

まず、専門用語とカピストラーノの実行モデルの明確化が必要だと思います。

Capistranoはローカルマシン上で動作するプログラムです。したがって、カピストラノ内のENVには、サーバーのローカル環境ではなく、ローカル環境が表示されます。 Capistranoを構成するRubyコードがそこで実行されていないため、CapistranoがリモートのENVをプレーンなRubyコードで「見る」方法はありません。

Capistranoとは何ですか? doは、実行するサーバーにコマンドを送信するためにSSHを使用しています。 mkdir,などのコマンド。

これを行い、デプロイメント・フローにカピストラーノタスクを追加し、この図示を表示するには:これは、リモートサーバー上envのコマンドを実行し、結果をキャプチャし、あなたのコンソールにそれを印刷します

task :puts_remote_env do 
    on roles(:all) do 
    remote_env = capture("env") 
    puts remote_env 
    end 
end 

これは、これがCapistranoの仕組みをより明確にしてくれることを願っています。


あなたはputs_remote_env出力から見ることができるように、あなたのprofile.dスクリプトで定義された変数が存在しません。どうして?

カプリストラノがログインしていない非対話型SSHセッションを使用しているからです。そのSSHセッションでは、profile.dスクリプトが評価されていません。これは、Capistrano FAQで詳しく説明しています。http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/

profile.dスクリプト以外の変数を設定する別の方法を見つける必要があります。

Capistranoの設定自体で指定することができます(例:このようなproduction.rb):それはSSHのコマンドを実行したとき

set :default_env, { var1: "val1", var2: "val2" } 

カピストラーノはその後、明示的にその環境を設定します。

dotenvのようなツールを使用すると、実行環境に依存せずに、変数ファイルを変数ファイルから読み込むことができます。

他のドットファイルの場所を試して、ログインしていない非対話セッションでも評価されているものがあるかどうかを確認できます。 Ubuntuでは、変数のエクスポートを成功させたのは、一番上の~/.bashrcです。

+1

優れた答え。 –

+0

これを書く時間をとってくれてありがとう、ありがとう。リンクの最後のグラフは素晴らしいです。 –

関連する問題