Не удается выполнить переход на heroku, ошибка сегментации sassc

#ruby-on-rails #ruby #heroku

#ruby-on-rails #ruby #heroku

Вопрос:

У меня возникли проблемы с переходом на heroku, я уже пробовал другие решения, связанные с ошибкой предварительной компиляции ресурсов., например, изменение application.rb для отключения предварительно скомпилированных ресурсов, запуск rake assets:precompile и обновление до rails 6.3.1, чтобы предотвратить недавнюю ошибку mimemagic.

Взглянув на журналы heroku, я заметил:

tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sassc-2.4.0/lib/sassc/engine.rb:43: [ОШИБКА] Ошибка сегментации в 0x0000000000000000 ruby 3.0.0p0 (2020-12-25 редакция 95aff21468) [x86_64-linux]

Часть журнала heroku

        ...
       yarn install v1.22.4
       [1/4] Resolving packages...
       [2/4] Fetching packages...
       info fsevents@2.1.3: The platform "linux" is incompatible with this module.
       info "fsevents@2.1.3" is an optional dependency and failed compatibility check. Excluding it from installation.
       info fsevents@1.2.13: The platform "linux" is incompatible with this module.
       info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
       [3/4] Linking dependencies...
       [4/4] Building fresh packages...
       Done in 5.07s.
       /tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sassc-2.4.0/lib/sassc/engine.rb:43: [BUG] Segmentation fault at 0x0000000000000000
       ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
       
       -- Control frame information -----------------------------------------------
       c:0042 p:---- s:0308 e:000307 CFUNC  :compile_data_context
       c:0041 p:0314 s:0303 e:000302 METHOD /tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sassc-2.4.0/lib/sassc/engine.rb:43
       c:0040 p:0044 s:0291 e:000290 METHOD /tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sassc-rails-2.1.2/lib/sassc/rails/compressor.rb:29
       c:0039 p:0007 s:0285 e:000284 METHOD /tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sprockets-4.0.2/lib/sprockets/sass_compressor.rb:30
       c:0038 p:0047 s:0280 e:000279 METHOD /tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sprockets-4.0.2/lib/sprockets/processor_utils.rb:84
       c:0037 p:0014 s:0272 e:000271 BLOCK  /tmp/build_7857ebbd/vendor/bundle/ruby/3.0.0/gems/sprockets-4.0.2/lib/sprockets/processor_utils.rb:66 [FINISH]
       .....
       c:0036 p:---- s:0267 e:000266 CFUNC  :reverse_each
  7f104d3bd000-7f104d3be000 rw-p 00000000 00:00 0 
       7fffab4a6000-7fffac4a5000 rw-p 00000000 00:00 0                          [stack]
       7fffac503000-7fffac505000 r--p 00000000 00:00 0                          [vvar]
       7fffac505000-7fffac507000 r-xp 00000000 00:00 0                          [vdso]
       ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
       
       
       Aborted
 !
 !     Precompiling assets failed.
 !
 !     Push rejected, failed to compile Ruby app.
 !     Push failed
 

Ответ №1:

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

Размещение этого в верхней части ваших инициализаторов / assets.rb позволило успешно скомпилировать ресурсы

 # config/initializers/assets.rb
Rails.application.config.assets.configure do |env|
  env.export_concurrent = false
end
 

Все еще взлом, но другой вариант.

Источник: https://github.com/sass/sassc-ruby/issues/197#issuecomment-735359755

Ответ №2:

Похоже, это недавняя ошибка, о которой сообщалось в выпусках 133 и 197

Одним из решений является использование более старой версии sassc. В частности, я пытался:

 gem 'sassc', '~> 2.0', '>= 2.0.1'
gem 'sprockets', '~> 3.7.2'
gem 'sass-rails', '~> 5.1.0 ' 
gem 'concurrent-ruby',  '~>1.1.5'
 

Который работает просто отлично. Все доступные версии перечислены здесь

Ответ №3:

Я уже видел ошибки ошибки сегментации sassc при обновлении между версиями Ruby на heroku (в данном случае это было с Ruby 3.1.0 до 3.1.1). Я рекомендую сначала попробовать две вещи:

  1. Убедитесь, что вы можете предварительно скомпилировать производственные ресурсы локально RAILS_ENV=production rails assets:precompile
  2. Очистите кэш сборки Heroku:
    • Установите плагин heroku-repo heroku plugins:install heroku-repo
    • heroku repo:purge_cache -a appname
    • повторное развертывание на Heroku