#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). Я рекомендую сначала попробовать две вещи:
- Убедитесь, что вы можете предварительно скомпилировать производственные ресурсы локально
RAILS_ENV=production rails assets:precompile
- Очистите кэш сборки Heroku:
- Установите плагин heroku-repo
heroku plugins:install heroku-repo
heroku repo:purge_cache -a appname
- повторное развертывание на Heroku
- Установите плагин heroku-repo