Пакет пакета не работает при запуске внутри задачи rake

Моя среда

Ванильная 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 завершается сбоем, когда Gemfile включает git или path gems. Bundler уже поддерживает упаковку драгоценных камней такого типа, и он отлично работает на моем терминале, но не работает с задачей 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 в терминале работает:

> 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

Запуск bundle package в 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)

Я не нахожу причин, почему это может потерпеть неудачу. Я все время работаю в одной и той же среде. Я уже проверил, что исполняемый файл пакета один и тот же (/usr/local/bin/bundle) во всех трех случаях. У меня нет следов, ни rvm, ни renv, ни чего-то в этом роде. Также попытался запустить задачу без выполнения пакета и с той же проблемой.

Заранее спасибо за любые советы о том, почему это происходит.


person Horacio    schedule 07.11.2012    source источник


Ответы (2)


У меня была такая же беда. Я проверил переменные среды и обнаружил, что сборщик модифицирует 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)

Надеюсь это поможет!

person Dení    schedule 05.12.2012
comment
Спасибо, действительно, использование вашего предложения решает мою проблему. - person Horacio; 19.04.2013

Можно также предпочесть использовать

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

и действительно это проблема RUBYOPT, как упоминал Денис

person Pandya M. Nandan    schedule 01.04.2014
comment
Это хорошо работает для меня. Вот актуальная документация по этому коду в разделе «Обстрел» bundler.io/v1. .3/man/bundle-exec.1.html для всех, кто придет сюда. - person vinhboy; 16.05.2015