Ruby 在rake任务内运行捆绑包时失败

Ruby 在rake任务内运行捆绑包时失败,ruby,bundle,rake-task,Ruby,Bundle,Rake Task,我的环境 香草Ubuntu 12.10,没有rvm或renv > gem --version 1.8.23 > ruby --version ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] > bundle --version Bundler version 1.2.1 我的问题 我有一个rake任务来打包我的gems并将它们上传到我的开发和生产服务器。问题是,当Gemfile包含git或path gem

我的环境

香草Ubuntu 12.10,没有rvm或renv

> gem --version
1.8.23

> ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

> bundle --version
Bundler version 1.2.1
我的问题

我有一个rake任务来打包我的gems并将它们上传到我的开发和生产服务器。问题是,当Gemfile包含git或path gem时,rake任务失败。Bundler已经支持打包这些类型的gem,它在我的终端上运行得非常好,但在运行rake任务时失败了,我无法找到原因

我的rake任务

> cat lib/tasks/upload.rake

namespace :deploy do
  desc "Package all gems and upload to remote server"
  task :upload => [:environment] do |t, args|
    if ! system("bundle package --all")
      raise "TOTAL FAIL"
    end

    # Magic method to upload vendor/cache to remote server
  end
end
我的尝试

在航站楼工程中运行捆绑包:

> bundle package --all
....
Using bson (1.7.0) 
Using bson_ext (1.7.0) 
Using cancan (1.6.8) from git://github.com/ryanb/cancan.git (at /home/ryujin/Projects/rails/Encluster4/vendor/cache/cancan-4dcd54459482) 
Using carrierwave (0.7.0) 
Using coffee-script-source (1.4.0) 
....
Updating files in vendor/cache
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Updating files in vendor/cache
使用irb运行捆绑包也可以:

> irb
irb> system("bundle package --all")
...
Using ansi (1.4.3) 
Using bson (1.7.0) 
Using bson_ext (1.7.0) 
Using cancan (1.6.8) from git://github.com/ryanb/cancan.git (at /home/ryujin/Projects/rails/Encluster4/vendor/cache/cancan-4dcd54459482) 
Using carrierwave (0.7.0) 
Using coffee-script-source (1.4.0) 
...
Updating files in vendor/cache
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Updating files in vendor/cache
=> true
但在我的简单rake任务中执行捆绑包时,捆绑包不起作用:

> bundle exec rake deploy:upload
Updating files in vendor/cache
Could not find cancan-1.6.8.gem for installation
rake aborted!
TOTAL FAIL

Tasks: TOP => deploy:upload
(See full trace by running task with --trace)
我找不到失败的理由。我一直在同一个环境中跑步。我已经检查了bundle exec文件在所有三种情况下都是相同的(/usr/local/bin/bundle)。我没有任何痕迹或rvm或renv或类似的东西。还尝试在没有bundle exec的情况下运行任务,但遇到了相同的问题

提前感谢您提供有关为什么会发生这种情况的任何提示。

我也遇到了同样的问题。 我检查了环境变量,发现bundler修改了RUBYOPT:

$ bundle exec env > benv.txt
$ env > env.txt
$ diff -u env.txt benv.txt
--- env.txt 2012-12-05 17:13:10.000000000 +0400
+++ benv.txt  2012-12-05 17:13:07.000000000 +0400
@@ -72,4 +72,8 @@
 CDPATH=.
 install_flag=1
 rvm_hook=
-_=/usr/bin/env
+_=/Users/denis/.rvm/gems/ruby-1.9.3-p327@global/bin/bundle
+_ORIGINAL_GEM_PATH=/Users/denis/.rvm/gems/ruby-1.9.3-p327:/Users/denis/.rvm/gems/ruby-1.9.3-p327@global
+BUNDLE_BIN_PATH=/Users/denis/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/bin/bundle
+BUNDLE_GEMFILE=/Users/denis/src/my-project/Gemfile
+RUBYOPT=-I/Users/denis/.rvm/gems/ruby-1.9.3-p327@global/gems/bundler-1.2.3/lib -rbundler/setup
因此,为了解决这个问题,我做了以下工作:

system %Q(/usr/bin/env RUBYOPT= bundle package)

希望这有帮助

也可以选择使用

Bundler.with_clean_env do
   sh "bundle update --source .."
end

事实上,正如丹尼斯所说,这是一个鲁比约特的问题。谢谢,确实使用你的建议解决了我的问题。这对我很有效。这里是关于这段代码的实际文档,在“炮轰”下,供任何到达这里的人使用。