14

ローカルで開発している別の gem を必要とする Sinatra アプリケーションがあります。開発中にローカルの gem コードを使用するように Bundler を構成するのに問題がありますが、本番環境ではベンダーの gem コードを使用します。

理想的には次のようなことができますが、Bundler では同じ gem を 2 回指定することはできません。

# Doesn't work:
group :development do
  gem 'awesome', :path => "~/code/awesome"
end

group :production do
  gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
end

それまでの間、gem を手動で販売し、デプロイするたびに Gemfile 内の gem ソースを更新することに頼っていましたが、これは非常に面倒です。私のワークフローは次のとおりです。

  1. 開発中にローカルの gem を指す ( gem 'awesome', :path => "~/code/awesome")
  2. デプロイの準備ができたら、gem を展開します。vendor/gems
  3. Gemfile を更新して、ベンダーの gem ( gem 'awesome', :path => "vendor/gems/awesome-0.0.1")を指すようにします
  4. 実行bundle install(Gemfile.lock を更新するため)
  5. コードをデプロイする
  6. ステップ 1 に戻ります。

面倒くさい!単純に Rake タスクを記述して現在のセットアップを自動化するよりも、もっとクリーンなことをしたいと思っています。

このシナリオに最適なワークフローは何ですか?

4

4 に答える 4

13

local.gem_name次のように、構成オプションを指定するだけで、それを可能にする新しい機能があります。

bundle config local.rack ~/path/to/local/rack

これは、Gemfile で指定された git リポジトリとブランチが gem にある場合にのみ機能します。

詳細については、Bundler ドキュメントを参照してください: http://bundler.io/v1.3/bundle_config.html

于 2012-05-01T19:33:09.897 に答える
4

どうやら、Gemfile で通常の Ruby を使用できるようです。この記事によると、環境変数 (または私が見つけたその他の変数) を設定して、使用する gem のバージョンを選択できます。

## based on an ENV variable
if ENV['RACK_ENV'] == "development"
  gem 'awesome', :path => "~/code/awesome"
else
  gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
end

多分それはうまくいくでしょう。進行中の gem を販売する必要がある場合は、ENV を設定し、それを販売し、ENV をリセットする小さなスクリプトを作成できます。え?

于 2011-09-07T17:41:03.260 に答える
0

docker を使用してコンテナを構築している場合は、いつでも dockerfile でパスを環境変数として設定し、Gemfile でこの環境変数を使用できます。Dockerfile と Gemfile の例を以下に示します。

Dockerfile

ARG tenant
ENV mgm=3
ENV GEMBOX_URL='abc.com:9292'
WORKDIR /app
COPY Gemfile* ./
RUN bundle install --without development test
COPY . .
ENTRYPOINT ["entrypoint.sh"]
CMD ["crond", "-f"]

Gemfile

source 'https://rubygems.org/'
source ENV['GEMBOX_URL']
gem 'jwt'
gem 'activerecord-import'
gem 'wicked_pdf' 
gem 'wkhtmltopdf-binary-edge', '~> 0.12.5.0'
gem 'zgear', '~> 0.6.4.1', source: ENV['GEMBOX_URL']
gem "piston", '~> 1.3.1', source: ENV['GEMBOX_URL']
gem 'communication_connector', '~> 0.1.4', source: ENV['GEMBOX_URL']
gem 'health_check', source: ENV['GEMBOX_URL']
于 2020-12-28T06:06:28.793 に答える
-5

これは、私が完全に機能しなかった提案です(スプリーテーマに使用され、テーマのいくつかのスタイルシートで問題が発生しました):

group :production do
      gem 'gemname', '~> 0.1.6', :git => 'git://github.com/foouser/gemname.git'
end

group :development do
      gem 'gemnamedev', :path => '~/path/gemname' # use local version
end

gemname.gemspec ファイルを複製して、それを gemnamedev.gemspec と呼び、その中の s.name を「gemnamedev」に変更します。

于 2012-07-12T16:05:17.937 に答える