пакетът на пакета се проваля, когато се изпълнява вътре в задачата за рейк

Моята среда

Vanilla 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

Моят проблем

Имам рейк задача да пакетирам моите скъпоценни камъни и да ги кача на моите сървъри за разработка и производство. Проблемът е, че задачата за рейк се проваля, когато Gemfile включва git или path скъпоценни камъни. Bundler вече поддържа опаковане на този тип скъпоценни камъни и работи чудесно на моя терминал, но се проваля, когато се изпълнява с рейк задача и не мога да разбера защо.

Моята задача за рейк

> 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

Но пакетът от пакети не работи, когато се изпълнява в моята проста задача за рейк:

> 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)

Не намирам причина защо това може да се провали. Тичам в една и съща среда през цялото време. Вече проверих, че файлът exec на пакета е един и същ (/usr/local/bin/bundle) и в трите случая. Нямам следи нито rvm, нито renv, нито нещо подобно. Също така се опитах да стартирам задачата без bundle exec и същия проблем.

Благодаря предварително за всякакви съвети защо се случва това.


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
Това работи добре за мен. Ето действителната документация за този код под Shelling out bundler.io/v1 .3/man/bundle-exec.1.html за всеки, който пристигне тук. - person vinhboy; 16.05.2015