実装を容易にするためにいくつかのエンジンを集め、含まれているすべてのエンジンにいくつかのユーティリティ メソッドを提供するためだけに存在する gem があります。そのようなユーティリティ メソッドの 1 つは、収集されたすべてのエンジンの新しいバージョンをリリースする rake タスクです。
私の問題は、収集されたエンジンのいずれかのコンテキストで実行する必要があるコードを実行すると、コマンドを除いてすべて (git コマンド、ファイル システム操作など) が機能することrake build
です。何らかの理由で、そのコマンドはアンブレラ gem のコンテキストで何らかの形で実行されており、Gemfile.lock からバージョン番号を取得しています。
例として次のコードを使用します。
Dir.chdir( PATH_TO_COLLECTED_ENGINE ) do
# Below lie all of my failed build attempts, all of which failed in the same way...
#p sh( 'bundle' , 'exec' , 'rake' , 'build' )
#p sh( 'bundle exec rake build' )
#p `bundle exec rake build`
#thr = Thread.new {
# p `bundle exec rake build`
#}
#thr.join
#load File.join(Dir.pwd, 'Rakefile')
#Rake::Task['build'].invoke
#p `gem build #{ PATH_TO_COLLECTED_ENGINE_GEMSPEC_FILE }`
end
標準の Ruby ファイルから実行すると、目的collected_engine_a 3.12.9 built to pkg/collected_engine_a-3.12.9.gem
のcollected_engine_a 3.12.9 built to pkg/collected_engine_a-3.12.2.gem
. アンブレラgemのGemfile.lockからバージョンを導出しているようです(そこでバージョンを調整すると出力に影響します)。
bundle exec
基本的に同じ結果で、序文の有無にかかわらず両方を試しました。
誰かがこれを取得して正しいコンテキストを取得する方法を考えることができますか、またはこれらをrakefileから標準スクリプトに移動するのに行き詰まっています(出力ファイルの名前を変更することは考慮されない貧弱なオプションです)?