Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rake构建在不正确的上下文中运行_Ruby On Rails_Ruby_Gem_Rake - Fatal编程技术网

Ruby on rails Rake构建在不正确的上下文中运行

Ruby on rails Rake构建在不正确的上下文中运行,ruby-on-rails,ruby,gem,rake,Ruby On Rails,Ruby,Gem,Rake,我有一个gem,它的存在只是为了将几个引擎收集在一起以便于实现,并且为所有包含的引擎提供一些实用方法。其中一种实用方法是rake任务,用于发布所有收集引擎的新版本 我的问题是,当我运行应该在收集的引擎之一的上下文中执行的代码时,除了rake build命令之外,所有的代码(git命令、文件系统操作等)都可以工作。出于某种原因,该命令不知何故在伞形gem的上下文中运行,并从其Gemfile.lock中获取版本号 将此代码用作示例: Dir.chdir( PATH_TO_COLLECTED_ENGI

我有一个gem,它的存在只是为了将几个引擎收集在一起以便于实现,并且为所有包含的引擎提供一些实用方法。其中一种实用方法是rake任务,用于发布所有收集引擎的新版本

我的问题是,当我运行应该在收集的引擎之一的上下文中执行的代码时,除了
rake build
命令之外,所有的代码(git命令、文件系统操作等)都可以工作。出于某种原因,该命令不知何故在伞形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文件运行时,我得到了为pkg/collected_engine_a-3.12.9.gem构建的
collected_engine_a 3.12.9的理想输出,但当从伞式gem中的rake任务运行时,我得到了为pkg/collected_engine_a-3.12.2.gem构建的
collected_engine_a 3.12.9的令人费解的输出。这个版本似乎是从伞形gem的Gemfile.lock派生的(如果我在那里调整版本,它会影响输出)

我尝试过使用和不使用
bundle exec
前言,结果基本相同


有人能想出一种方法来获取正确的上下文吗?或者我被困在将这些内容从rakefile移到标准脚本中(重命名输出文件是一个不好的选择,不会被考虑)

bundle exec
在子shell中启动时有特定的行为。您可以在
bundle help exec
中看到以下注释:

确保如果在子shell中调用bundler,它使用相同的Gemfile(通过设置BUNDLE\u Gemfile)

因此,在您的情况下,您会:


bundle exec rake build bundle_GEMFILE={PATH_TO_COLLECTED_ENGINE}/GEMFILE

包装在
Bundler.with_clean_env do中。。。end
块似乎也能正常工作。