2

簡単なSinatraアプリをまとめて、独自のBundlerenvを実行する必要のあるテストルビースクリプトを呼び出そうとしています。

Sinatraアプリでメソッドを作成します。

system("cd /test_app/; bundle exec ruby some_file.rb")

バンドラーが環境を設定する方法が原因で、これは機能しません。新しいシェルセッションを開始してスクリプトを実行し、Sinatraから機能するようにする方法はありますか?

または、これを行う別の方法はありますか?基本的に、私の唯一の要件は、これらのスクリプトをWebページ上のリンクからトリガーできるため、一部のチームメンバーがテストプロセスを開始できることです。

4

2 に答える 2

1

これはうまくいくようです:

Dir.chdir "/test_app"
`bundle exec ruby some_file.rb`

またrvm use ruby-1.9.2-p320、sinatraを開始する前に、正しいルビーを入手する必要がありました。rvmは、rubyプロセスで自分自身を変更するように言われるのを好みません。(これは理にかなっています!)

(system()の代わりにバックティックを使用すると、出力が返されるので、印刷することができます。)

于 2012-07-16T17:33:19.050 に答える
1

バンドラー環境をきれいにきれいにするこのスニペットを見つけました。-http ://johnbintz.github.com/blog/2012/02/02/the-cleanest-bundler-env/

Bundler.with_sparkling_clean_env do
  system("cd /test_app; bundle --gemfile ./Gemfile exec ruby #{cmd}")
end

module Bundler
  class << self
    def with_sparkling_clean_env
      oenv = ENV.to_hash

      %w{BUNDLE_GEMFILE RUBYOPT GEM_HOME GIT_DIR GIT_WORK_TREE}.each { |key| ENV.delete(key) }

      yield

      ENV.replace(oenv)
    end
  end
end
于 2012-07-23T14:51:01.990 に答える