Приложение rails 6 тестирует зеленый, но в продакшене странный эффект: LoadError (невозможно загрузить такой файл - rb-readline)

Развертывание приложения rails 6, которое прошло проверку на зеленый цвет.

Конечно, ожидается такое же поведение в продакшене после развертывания, как и в продакшене.

Однако в продакшене при запуске происходит сбой со следующим результатом:

LoadError: cannot load such file -- rb-readline
  [path]/shared/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
  [path]/shared/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require' [$PATH]/ta.rb:19:in `<top (required)>'

rb-readline существует в Gemfile:

$ grep rb-readline Gemfile.lock
    rb-readline (0.5.5)
  rb-readline

Требуемая последовательность:

require 'pp'
require 'thor'
require 'ostruct'
require 'colorize'
require './config/environment'

require 'ta_thor'
require 'rb-readline'
require 'history_cache'
require 'grumples_module'

В режиме разработки проблем нет. Не работает только в производственном режиме.

Сводка производственной среды:

rake about
Rake: Load benchmark (in seconds)
      user     system      total        real
  0.396619   0.084458   0.483907 (  0.487172).
About your application's environment
Rails version             6.0.1
Ruby version              ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
RubyGems version          3.0.3
Rack version              2.0.7
JavaScript Runtime        mini_racer (V8)
Middleware                ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Executor, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Rails::Rack::Logger, ActionDispatch::ShowExceptions, ActionDispatch::DebugExceptions, ActionDispatch::ActionableExceptions, ActionDispatch::Callbacks, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ContentSecurityPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::ETag, Rack::TempfileReaper, Warden::Manager, ExceptionNotification::Rack
Application root          [path]
Environment               production
Database adapter          mysql2
Database schema version   20190213065900

Я в тупике.

Результат производства gem env:

RubyGems Environment:
  - RUBYGEMS VERSION: 3.0.6
  - RUBY VERSION: 2.6.5 (2019-10-01 patchlevel 114) [x86_64-linux]
  - INSTALLATION DIRECTORY: [*** home dir ***]/.gem/ruby/2.6.5
  - USER INSTALLATION DIRECTORY: [*** home dir ***]/.gem/ruby/2.6.0
  - RUBY EXECUTABLE: [*** home dir ***]/.rubies/ruby-2.6.5/bin/ruby
  - GIT EXECUTABLE: /usr/bin/git
  - EXECUTABLE DIRECTORY: [*** home dir ***]/.gem/ruby/2.6.5/bin
  - SPEC CACHE DIRECTORY: [*** home dir ***]/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: [*** home dir ***]/.rubies/ruby-2.6.5/etc
...

ruby -v

ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

и я все еще в тупике.

1 ответ

Похоже, между dev и prod есть разные версии Ruby: - ​​2.6.5p114 в разработке - 2.6.0 в производстве.

Возможно, версия какого-нибудь гема в gemfile.lock несовместима с 2.6.0.

2 решения: если у вас есть rvm или rbenv в dev, вы можете установить 2.6.0 локально и снова выполнить установку пакета и, возможно, исправить то, что необходимо исправить, играя с версиями gems.

В качестве альтернативы вы можете добавить рубиновую версию в свой gemfile (не gemfile.lock): ruby '2.6.5' надеясь, что ваша производственная среда сможет обслуживать эту версию Ruby.

Другие вопросы по тегам