Bundler: вы пытаетесь установить в режиме развертывания после изменения Gemfile

Я новичок в bundler и capistrano, и я пытаюсь использовать их вместе. Когда я пытаюсь развернуть, я получаю сообщение:

Вы пытаетесь установить в режиме развертывания после изменения Gemfile. Запустите `bundle install 'в другом месте и добавьте обновленный Gemfile.lock в элемент управления версиями.

Я не знаю, как удовлетворить систему, жалующуюся, и я не понимаю, почему жалоба наступает, потому что я читал в документе:

Если Gemfile.lock существует и вы обновили свой Gemfile (5), bundler будет использовать зависимости в Gemfile.lock для всех драгоценных камней что вы не обновили, но будете повторно решать зависимости драгоценных камней что вы обновили. Вы можете найти дополнительную информацию об этом обновлении процесс ниже под КОНСЕРВАТИВНЫМ ОБНОВЛЕНИЕМ.

Я интерпретирую это как означающее, что Bundler может справиться с тем, что мой Gemfile не тот, который он ожидал. Любая помощь?

Характеристики: Ruby 1.9.3, Rails 3.2.3, Capistrano 2.12.0, Bundler 1.1.4, Windows 7, развертывание на машине Posix.

Изменить: Мой Gemfile содержит логические блоки, такие как:

unless RbConfig::CONFIG['host_os'] === 'mingw32'
  # gem 'a' ...
end

Ответ 1

Сообщение об ошибке, которое вы получаете относительно Gemfile.lock, может быть связано с тем, что ваши Gemfile и Gemfile.lock не согласны друг с другом. Похоже, вы изменили что-то в своем Gemfile, так как вы в последний раз бежали bundle install (или update). Когда вы bundle install, он обновляет ваш Gemfile.lock с любыми изменениями, внесенными вами в Gemfile.

Удостоверьтесь, что вы запустили bundle install локально, и после этого зайдите в исходное управление вашим обновленным Gemfile.lock. Затем попробуйте выполнить развертывание.

Изменить. Как было отмечено в комментариях, условие в Gemfile приводило к действительной Gemfile.lock на одной платформе, недействительной на другой. Предоставление флага : platform для этих зависимых от платформы драгоценных камней в Gemfile должно решить асимметрию.

Ответ 2

vi.bundle/config

измените параметр BUNDLE_FROZEN с '1' на '0'

выполните "bundle install"


ИЛИ

запустите конфигурацию "bundle config"

проверьте, истинно ли значение "заморожено", установлено значение false

пакет конфигурации замороженный false

Ответ 3

Остерегайтесь глобальной конфигурации Bundler.

У меня была глобальная конфигурация в моей среде dev в ~/.bundle/config, которой у меня не было в моей среде CI/Production, которая вызвала создание Gemfile.lock в моей среде dev, отличную от той, что была в моем CI/Производственная среда.

В моем случае я устанавливал github.https в true в моей среде dev, но не имел такой конфигурации в моей среде CI/Production. Это заставило два файла Gemfile.lock отличаться.

Ответ 4

Когда вы увидите следующее...

$ bundle install
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment`.

You have added to the Gemfile:
* source: rubygems repository https://rubygems.org/
* rails (~> 3.2)
. . .

... Тогда, скорее всего, проблема связана с устаревшими .gem файлами в каталоге вашего поставщика/кеша.

Возможно, вы ранее запускали $bundle install --deployment, который помещал некоторые "устаревшие".gem файлы в кеш?

В любом случае вы можете пройти эту ошибку, выполнив: bundle install --no-deployment

Это одна из многих замечательных особенностей Rails... сообщения об ошибках часто сообщают вам, что делать, чтобы исправить эту проблему.

Ответ 5

Моя конкретная проблема была связана с сообщениями @JoshPinter, т.е. о расхождениях хоста dev-vs-deploy в протоколе, используемом компоновщиком для получения драгоценных камней из github.

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

gem 'activeadmin', github: 'activeadmin'

... к этому безопасному синтаксису (см. ссылку):

gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'

И мои развертывания вернулись к нормальной жизни.

Ответ 6

Решение для меня несколько отличалось от других, перечисленных здесь. Я пытался обновить с sidekiq до sidekiq-pro (что требует связки 1.7.12+), но я продолжал получать сообщение "Вы пытаетесь установить в режиме развертывания после изменения вашего Gemfile" из travis-ci

Проверка вывода на консоль travis-ci показала, что использовалась более старая версия bundler.

В моем случае мне пришлось отредактировать файл travis.yml, чтобы добавить:

before_install: - gem update bundler

Это вынудило travis-ci использовать последнюю версию bundler и убрало сообщение об ошибке.

Ответ 7

rm -fr .bundle

Исправлена ​​проблема для меня.

Ответ 8

Раньше я сталкивался с чем-то подобным. Один из способов исправить это, я думаю, но может занимать больше места на вашем сервере, чем вы хотите, - это запустить

bundle install --deployment 

а затем попробуйте развернуть. Это делает что-то вроде установки всех ваших драгоценных камней в папку поставщика, которая, как мне кажется, вообще хороша, чтобы избежать... но все равно, вероятно, будет работать. Мое приложение, используемое для такого поведения, мое решение заключалось в удалении точных версий для загрузки из моего Gemfile, а затем в переустановке и развертывании.

gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'

к

gem 'rails_admin'

Или вы можете сделать то, что он предлагает, и Git ваш проект с производственного сервера на локальный компьютер, свяжите его и затем отпустите на свой сервер. Это решение может быть не на 100% правильным, но некоторые из них работали для меня... просто подумал, что я поделюсь. Гудлак

Ответ 9

Другая причина ошибки:

Это немного глупо, но я уверен, что кто-то другой совершит ту же ошибку.

Для Rails 4 Хероку добавил камень rails_12фактор. Если вы использовали его, прежде чем добавить его, то у вас будут эти два драгоценных камня:

gem 'rails_log_stdout',  github: 'heroku/rails_log_stdout'
gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'

Вам нужно удалить их, когда вы добавите новый. (они включены). Я думаю, вы можете уйти от него, пока не коснетесь их линий в своем файле gem, тогда Heroku замечает дублирование и кричит с вышеупомянутой ошибкой.

Удачи с Rails 4.

Ответ 10

В нашем случае мы использовали функцию, которая не была доступна в старой версии bundler, которая работала на нашей производственной машине. Поэтому было достаточно обновить пакет, т.е. Сделать gem update bundler.

Ответ 11

Это может быть опасная идея, но если вы абсолютно должны что-то протестировать в рабочей среде развертывания, вы можете редактировать файл .bundle/config

# This value is normally '1' 
# Set it to '0'
BUNDLE_FROZEN: '0'

Теперь вызывается пакет, в моем случае мне нужно было обновить конкретный камень, так что моя команда

RAILS_ENV=production bundle update <whatever gem>

Вероятно, вы должны изменить его после обновления, так что теперь все работает так, как вы ожидаете. Опять же, это, вероятно, не поддерживается, и YMMV

Ответ 12

Я столкнулся с этим развертыванием приложения Nesta после некоторых обновлений gem. Что для меня работало: удалить Gemfile.lock, запустите bundle install, чтобы сгенерировать его и снова развернуть.

Ответ 13

Я столкнулся с подобной проблемой, но я сделал как bundle install, так и bundle update, и Heroku все еще отклонил мой push.

Я исправил проблему, просто удалив Gemfile.lock, а затем снова запустив bundle install. Затем я добавил, зафиксировал и перетащил это в мой репозиторий git. После этого у меня не было проблем с толканием к Героку.

Ответ 14

для heroku, вам не нужно менять синтаксис в Gemfile. вы можете просто добавить BUNDLE_GITHUB__HTTPS (обратите внимание на двойное подчеркивание) как переменную среды и установить ее на true (в панели инструментов вашего героя на вкладке Settings в разделе Config Vars). это приведет к переключению протокола от git:// до https:// для всех таких запросов.

Ответ 15

У меня возникло сообщение об ошибке при попытке нажать на Heroku. Я нашел исправленное решение.

  • Git pull origin master
  • Git статус
  • Git commit
  • Git push origin master
  • Git push heroku master

Ответ 16

Эта проблема может быть связана с подмодулями, указывающими на старые версии кода. Для меня я решил эту проблему, обновив мои подмодули

Если у вас есть подмодули, попробуйте запустить:

git submodule update --init

bundle install

Ответ 17

После этой команды вы можете снова выполнить обычную установку пакета:

bundle install --no-deployment

Ответ 18

Я прочитал дюжину решений на разных ресурсах, но не нашел точно, что может мне помочь в этой ситуации

Так что я нашел решение. Точно говоря, я внимательно прочитал сообщение об ошибке, и было решение: Запустите пакетную установку в другом месте. "В другом месте" был мой Cloud9, где я разработал свое приложение. Итак, мои шаги

  1. скопируйте Gemfile и Gemfile.lock с сервера на локальный компьютер с помощью команды rsync
  2. вставить эти два файла в мой проект RoR (я использовал Cloud9)
  3. Откройте Gemfile и внесите изменения, которые я хочу. В моем случае я добавил драгоценный камень 'thin'
  4. в терминале перейдите к моему приложению на Cloud9 и запустите bundle install. в этом случае у вас будет измененная версия Gemfile.lock
  5. скопируйте новые Gemfile и Gemfile.lock на сервер с помощью rsync
  6. Перейдите в папку с моим приложением и снова запустите bundle install --deployment --without development test ! Желаю УДАЧИ всем!

Ответ 19

Мне все равно Это то, что я сделал. Это исправлено.

rm -rf .bundle 
rm -rf Gemfile.lock
bundle install