Heroku развертывает Ruby 2.6.1: warn_for_outdated_bundler_version - PullRequest
0 голосов
/ 21 марта 2019

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

Я пытаюсь развернуть приложение Rails 5.2 с Ruby 2.6.1, но я получаю эту ошибку на этапе развертывания:

/app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/lockfile_parser.rb:95:in `initialize'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/definition.rb:83:in `new'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/definition.rb:83:in `initialize'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/dsl.rb:234:in `new'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/dsl.rb:234:in `to_definition'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/dsl.rb:13:in `evaluate'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/definition.rb:34:in `build'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler.rb:135:in `definition'
from /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler.rb:101:in `setup'
from /app/vendor/ruby-2.6.1/lib/ruby/2.6.0/bundler/setup.rb:20:in `<top (required)>'
from /app/vendor/ruby-2.6.1/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /app/vendor/ruby-2.6.1/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /app/config/boot.rb:3:in `<top (required)>'
from /app/bin/rake:2:in `require_relative'
from /app/bin/rake:2:in `<main>'

Что я нахожу странным в этой ошибке, так это строка:

/app/vendor/bundle/ruby/2.6.0/gems/bundler-2.0.1/lib/bundler/lockfile_parser.rb:108:in `warn_for_outdated_bundler_version': You must use Bundler 2 or greater with this lockfile. (Bundler::LockfileError)

Heroku, кажется, говорит, что использует Ruby 2.6.0. Но на этапе сборки он говорит, что использует Ruby 2.6.1 с Bundler 2:

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.6.1
-----> Installing dependencies using bundler 2.0.1

Сборка прошла успешно, но развертывание не выполнено.

Вот как настроено мое приложение.

Gemfile (сводится к тому, что имеет значение)

ruby "2.6.1"
gem 'rails', '~> 5.2'

Gemfile.lock (сводится к тому, что имеет значение)

RUBY VERSION
   ruby 2.6.1p33

BUNDLED WITH
   2.0.1

На герою, мой buildpack - heroku/ruby. Мой стек heroku-18.

Heroku, кажется, поддерживает Bundler 2, как сказано в в этом посте .

Есть идеи о том, что может привести к сбою в развертывании?

1 Ответ

0 голосов
/ 21 марта 2019

Я нашел решение.Проблема была во время развертывания, а не во время сборки.При развертывании использовался Ruby 2.6.0, потому что веб-динамо Heroku по умолчанию:

rails server -p $PORT -e $RAILS_ENV

Тем не менее, в этом сообщении из комплекта github говорится, что перед каждой командой ставится префикс bundle exec.Но команда rails server из dyno не имеет префикса, поэтому

Обходной путь, который я нашел, - это изменение файла проекта Procfile и добавление следующей строки:

web: bundle exec rails server -p $PORT -e $RAILS_ENV

Таким образомкоманда rails server использует ожидаемый Ruby version, 2.6.1 вместо 2.6.0, который выдал ошибку.

...