継承現在の環境変数を使用せずに、Railsの中でブランドの新しいプロセスを開始するには?
-
25-09-2019 - |
質問
私は、マスターは、他のレールのアプリを制御アプリをレール開発しています。これは、これらのレールのアプリを起動するbashスクリプトを持っており、それは手動でコマンドラインで呼び出さている間、それはうまく動作します。
私はbackticks
、system
、またはexec
を使用して、アプリをレールの問題で、それを呼び出す場合は、しかし、スクリプトが失敗します。
エラーメッセージは次のとおりです。
unicorn_rails worker[0] -c ../configs/unicorns/c5.rb -E production must be run inside RAILS_ROOT:
#<Gem::LoadError: can't activate rack (~> 1.0.0, runtime), already activated rack-1.2.1.
Make sure all dependencies are added to Gemfile
.>
ここで
とは、bashのファイルです。
cp configs/Gemfile* $1
cd $1
bundle
bundle exec unicorn_rails -c ../configs/unicorns/$1.rb -E production
このような問題を解決するには?
あなたが見ることができるように、私はそれが自分の宝石だ持っている必要があり、子プロセスを開始するためにbundle exec
を使用するには、右?
解決
それはロード時に
は、環境変数はルビーにOSによって渡されます。 Rubyは、さらに追加のRailsを開始し、その後、独自の追加の変数を追加します。
あなたはENVハッシュで遊んでそれらを操作することができるはずです。これが定義されているものが表示されます:
ENV.each { |key, val| puts "#{ key } => #{ val }"}
あなたは直接、子を起動するコードを呼び出すENVの値を変更することで、子プロセスに渡されたものを微調整することができます:
ENV['PATH'] = '/path/to/application'
ENV['PATH'] # => "/path/to/application"
パスの変更、または環境の子アプリの知識を制限するために、不要なENVエントリをストリッピングはかなり一般的です。
所属していません StackOverflow