2017-03-20 1 views
1

スタンドアロンで移植性のあるルビースクリプトを作成するために、bundler/inlineを使用しています。path/gem_homeを 'bundler/inline'、rbenv、グローバルルビーと組み合わせて設定する

私はこのスクリプトをプロビジョニングするサーバーは非常に具体的ですが、それらはrbenv(複数のルビーバージョンをロールバック/使用できます)と特定の宝石(バックアップ宝石)をインストールするのにかかる時間からです。我々は、グローバルなルビーインストールを使用します。エラーをスローroot以外のユーザーで実行される「バンドル/インライン」がスクリプトで結果の

Your user account isn't allowed to install to the system Rubygems. 
You can cancel this installation and run: 

    bundle install --path vendor/bundle 

to install the gems into ./vendor/bundle/, or you can enter your password 
and install the bundled gems to Rubygems using sudo. 

悲しいことバンドラ/インラインは、引数としてこれを与えるためのオプションを持っていません。

だから私はバンドルパスを設定することでこれを解決しようとしました:bundle config path ~/.gem/ruby/2.3.0/、しかしこれは動作しません。 (確認して設定が正しく保存されています)

設定GEM_HOME=~/.gem/ruby/2.3.0/が動作します。 (Ruby gemsは、このシナリオでは2つのgem homeをサポートしているので、実際はうまく動作します)。唯一の問題は、rbenvによって起動されたマイナーバージョンのルビに沿って、その環境変数を維持するために何らかの簿記を行う必要があることです。私は簡単に現在のバージョンに基づいて、このバージョンを計算することができ、私のRubyスクリプトからこのENVを設定することはできません。

version_used_for_gem_home = RUBY_VERSION.gsub /\.\d+$/, '.0' 
ENV['GEM_HOME'] = "/var/lib/postgresql/.gem/ruby/#{version_used_for_gem_home}/" 
require 'bundler/inline' 

は、任意の簿記を行うために私を必要としない、より良い解決策はありますか?私は、私達はちょうど同じ問題を抱えていた、と私は、これはあなたが明示的に必要なトリック

require 'bundler/inline' 
require 'bundler' 
Bundler.configure # where the magic happens 
# passing true here does the install; in real scripts we 
# pass a boolean based on a --install flag. 
gemfile(true) do 
    ...gems go here... 
end 

をして発見した...私はパス/宝石ホームを変更するために使用できるいくつかのrbenvフックを持っている

答えて

0

を大好きですBundler.configureを呼び出してバンドル設定を読み込み、パスを正しく設定してください。

関連する問題