Моята среда
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 и същия проблем.
Благодаря предварително за всякакви съвети защо се случва това.