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



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




вы пытаетесь установить в режиме развертывания после изменения вашего Gemfile. Запустите "bundle install" в другом месте и добавьте обновленный Gemfile.блокировка для контроля версий.




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




Если Gemfile.блокировка существует, и вы обновили свой Gemfile(5),
bundler будет использовать зависимости в Gemfile.замок для всех драгоценных камней
то, что вы не обновили, но повторно разрешите зависимости драгоценных камней
что вы сделали обновление. Вы можете найти дополнительную информацию об этом обновлении
процесс ниже при консервативном обновлении.




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



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



Edit: мой Gemfile включает в себя логические блоки, такие как:



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

16 ответов:

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

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

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

vi .связка/конфигурации

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

do "bundle install"


или

запустить "bundle config"

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

bundle config frozen false

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

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

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

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

$ 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 который поставил некоторые "устаревшие".драгоценные файлы в кэше?

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

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

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

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

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

before_install: - gem update bundler

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

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

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

gem 'activeadmin', github: 'activeadmin'

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

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

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

rm -fr .bundle

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

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

bundle install --deployment 

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

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

до

gem 'rails_admin'

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

еще одна причина ошибки:

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

для рельсов 4 Heroku добавил драгоценный камень rails_12factor. Если вы использовали его до того, как они добавили его, то у вас будут эти два драгоценных камня:

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

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

удачи с рельсами 4.

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

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

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

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

RAILS_ENV=production bundle update <whatever gem>

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

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

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

я исправил проблему, просто удалив Gemfile.блокировка, а затем работает bundle install снова. Я потом добавил, совершенные и толкнул, что мой репозиторий Git. После этого у меня не было проблем с тем, чтобы подтолкнуть к Героку.

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

У меня было сообщение об ошибке при попытке на Heroku. Я нашел следующее решение исправлено.

  1. Git pull origin master
  2. статус ГИТ
  3. коммитов
  4. Git push origin master
  5. Git push heroku master

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

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

git submodule update --init

bundle install

Comments

    Ничего не найдено.