Не удается получить пакетный exec для работы в производстве

Я установил свои драгоценные камни в производство с помощью:

cd /app/releases/current && bundle install --gemfile /app/releases/current/Gemfile --path /app/shared/bundle --deployment --quiet --without development test

Я не могу bundle exec удалить любой из моих драгоценных камней (кроме rake и gem):

$ bundle exec whenever
bundler: command not found: whenever
Install missing gem executables with `bundle install`

Драгоценные камни правильно установлены в /app/shared/bundle:

$ cd /app/shared
$ find . -name whenever
./bundle/ruby/1.9.1/gems/whenever-0.6.8/bin/whenever
./bundle/ruby/1.9.1/gems/whenever-0.6.8/lib/whenever

Моя (сгенерированная) конфигурация пакета (в/app/current/.bundle/config):

---
BUNDLE_FROZEN: "1"
BUNDLE_PATH: /app/shared/bundle
BUNDLE_DISABLE_SHARED_GEMS: "1"
BUNDLE_WITHOUT: development:test

Я запускаю ruby ​​1.9.2p290, вручную установленный в /usr/local/bin.

У меня есть bundle install мои драгоценные камни с опцией --binstubs? Почему bundle exec не выполнял поиск сохраненного BUNDLE_PATH?

Ответы

Ответ 1

Я изменил --path с /app/shared/bundle на vendor/bundle, что заставило его работать.

Мне это показалось неправильным, поэтому я удалил /app/shared/bundle и vendor/bundle и снова пробежал bundle install до /app/shared/bundle.

Эта чистая bundle install исправила проблему. Я не знаю, почему!

Если у кого есть объяснение, я хотел бы отметить вас как принятый ответ. Но для меня это проблема.

Ответ 2

Использование Capistrano и Rails и использование deploy.rb в качестве файла развертывания.

Я понял, что изменение порядка, где появляется require "whenever/capistrano", действительно имеет значение. Я положил это на почти последнюю строку:

В deploy.rb:

#first lines:
set :rvm_ruby_string, "1.9.3"
set :rvm_type, :user
set :whenever_command, "bundle exec whenever"

# others...

# last lines
require 'rvm/capistrano'
require 'bundler/capistrano'
require "whenever/capistrano"

after "deploy:update_code", "customs:config"
after "deploy:create_symlink","deploy:create_symlink"
after "deploy", "deploy:cleanup"

load 'deploy/assets'
# end

Ответ 3

У меня была эта проблема и требовалось в правильном порядке, т.е.

require 'rvm/capistrano'
require 'bundler/capistrano'
require 'whenever/capistrano'

Он все еще хотел запустить обновление crontab перед пакетом: install. Решение состояло в том, чтобы обновить мой локальный пакет с помощью

gem update bundler

После этого он снова начал работать. Не уверен точно, что изменилось между версиями, которые сломали все это.

Ответ 4

Проверьте, где установлен ваш пакет: install, и попробуйте переместить его выше, требуя "when/capistrano" в файле deploy.rb.

Кажется, что это было вызвано, когда я сделал обновление пакета, которое увеличивало всякую версию gem в моем Gemfile.lock.

Похоже, когда пытается запустить его обновление chrontab до того, как мой файл развертывания запустят пакет: install

из https://github.com/javan/whenever/blob/master/lib/whenever/capistrano.rb

before "deploy:finalize_update", "whenever:update_crontab"

И мой deploy.rb имел

after 'deploy:finalize_update', 'bundle:install'

Как и все в этом потоке, я пробовал несколько вещей, и я не уверен, что это то, что исправил его для меня, но сменив установку пакета до развертывания: finalize_update, а также установив его как "раньше", всякий раз, когда /capistrano 'похоже на вероятное исправление в моем сценарии.

Ответ 5

Я думаю, когда всякий раз, когда gem не находится в вашем Gemfile, или он находится в разделе теста или разработки вашего Gemfile

Ответ 6

Вероятно, разные проблемы вызывают одно и то же сообщение об ошибке. Для меня мне пришлось обновить capistrano gem после обновления всякий раз, когда gem получает поддержку ролей. bundle exec всякий раз, когда работала до моего обновления всякий раз.

Ответ 7

Используя ярлык развертывания Brightbox, который обрабатывает для меня спутник и т.д. (по волшебству, в некоторых других рецептах), я нашел, что это работает:

Заменить

require "whenever/capistrano"

с содержимым https://github.com/javan/whenever/blob/master/lib/whenever/capistrano/v2/hooks.rb затем измените его для загрузки после пакета: установка завершается (у вас может быть или не быть этой задачи, я не знаю, стандартно ли она)

# require "whenever/capistrano"
# hacked whenever/lib/whenever/capistrano/v2/hooks.rb below to work with brightbox bundler installation

require "whenever/capistrano/v2/recipes"

# Write the new cron jobs near the end.
after "bundler:install", "whenever:update_crontab"
# If anything goes wrong, undo.
after "deploy:rollback", "whenever:update_crontab"