1

バンドラーを使用しており、デプロイ時にサーバー アプリケーションがいくつかの gem なしでインストールされます

bundler install --without test

この場合、一部のコードを無効にする必要があります (rspec && cucumber タスクを Rakefile にロードするなど)。

Bundler.installed?(:test)このケースを検出するなどの簡単な方法はありますか?

4

1 に答える 1

1

あなたが基本的にやろうとしているのは、あなたのproduction環境をあなたのdevelopment(またはtest)環境から区別することです。インストール済みの gem に依存するべきではありませんが、Bundler グループは依然として有用です。

たとえばRailsのように、環境変数を使用することをお勧めします。次に、サーバー構成でこの変数を設定できます

$ export MYAPP_ENV='production'

デフォルト値でアプリケーションにロードします:test

MYAPP_ENV = ENV['MYAPP_ENV'].to_sym || :test

このようにして、本番サーバー上にいるかどうかをいつでも確認できます。Gemfile が次のようになっているとします。

source :rubygems

gem "sinatra"

group :test do
  gem "rspec"
  gem "faker"
end

次に、関連する宝石のみを要求できます

Bundler.require(MYAPP_ENV)

元の質問に戻ります。次のコマンドを使用するだけで、本番マシンを使用しているかどうかを簡単に確認できますMYAPP_ENV

if MYAPP_ENV == :test
  # do some test specific stuff
end

これが役立つことを願っています。

于 2012-07-06T10:34:32.847 に答える