Невозможно получить пакет exec для работы в производстве - PullRequest
15 голосов
/ 23 ноября 2011

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

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?

Ответы [ 7 ]

8 голосов
/ 01 января 2013

Использование 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
4 голосов
/ 13 марта 2013

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

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

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

gem update bundler

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

1 голос
/ 07 марта 2013

Проверьте, где находится ваш пакет: установка установлена, и попробуйте переместить его выше, указав 'всякий раз / 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 'кажется вероятным исправлением в моем сценарии.

0 голосов
/ 22 апреля 2014

Используя brightbox для развертывания 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"
0 голосов
/ 29 января 2013

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

0 голосов
/ 07 декабря 2011

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

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

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

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

0 голосов
/ 05 декабря 2011

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

...