asset_sync Gem заставляет Heroku зависать при прекомпиляции
Я использую гем asset_sync с развертыванием Heroku (Rails 3.2.3). Прекомпиляция работает хорошо локально (без проблем помещая ресурсы в мое хранилище AWS), но когда я нажимаю на Heroku, она зависает во время предварительной компиляции ресурсов.
Preparing app for Rails asset pipeline
Running: rake assets:precompile
AssetSync: using default configuration from built-in initializer
Тогда в конечном итоге это без объяснения причин:
/app/slug-compiler/lib/utils.rb:66:in `block (2 levels) in spawn': command='/app/slug-compiler/lib/../../tmp/buildpacks/ruby/bin/compile /tmp/build_33de6far26atq /app/tmp/repo.git/.cache' exit_status=0 out='' at=timeout elapsed=900.1074194908142 (Utils::TimeoutError)
from /app/slug-compiler/lib/utils.rb:52:in `loop'
from /app/slug-compiler/lib/utils.rb:52:in `block in spawn'
from /app/slug-compiler/lib/utils.rb:47:in `popen'
from /app/slug-compiler/lib/utils.rb:47:in `spawn'
from /app/slug-compiler/lib/buildpack.rb:38:in `block in compile'
from /app/slug-compiler/lib/buildpack.rb:36:in `fork'
from /app/slug-compiler/lib/buildpack.rb:36:in `compile'
from /app/slug-compiler/lib/slug.rb:487:in `block in run_buildpack'
from /app/slug-compiler/lib/utils.rb:121:in `log'
from /app/slug-compiler/lib/slug.rb:743:in `log'
from /app/slug-compiler/lib/slug.rb:486:in `run_buildpack'
from /app/slug-compiler/lib/slug.rb:116:in `block (2 levels) in compile'
from /app/slug-compiler/lib/utils.rb:102:in `block in timeout'
from /usr/local/lib/ruby/1.9.1/timeout.rb:58:in `timeout'
from /app/slug-compiler/lib/utils.rb:102:in `rescue in timeout'
from /app/slug-compiler/lib/utils.rb:97:in `timeout'
from /app/slug-compiler/lib/slug.rb:104:in `block in compile'
from /app/slug-compiler/lib/utils.rb:121:in `log'
from /app/slug-compiler/lib/slug.rb:743:in `log'
from /app/slug-compiler/lib/slug.rb:103:in `compile'
from /app/slug-compiler/bin/slugc:85:in `block in <main>'
from /app/slug-compiler/lib/slug.rb:495:in `block in lock'
from /app/slug-compiler/lib/repo_lock.rb:44:in `call'
from /app/slug-compiler/lib/repo_lock.rb:44:in `run'
from /app/slug-compiler/lib/slug.rb:495:in `lock'
from /app/slug-compiler/bin/slugc:66:in `<main>'
! Heroku push rejected, failed to compile Ruby/rails app
$ heroku config
показывает, что я установил следующие ENV, которые я проверял снова и снова. Я знаю, что это правильные значения, потому что они работают, когда я прекомпилирую локально:
AWS_ACCESS_KEY_ID: XXXX
AWS_SECRET_ACCESS_KEY: XXXX
FOG_DIRECTORY: XXXX
FOG_PROVIDER: AWS
FOG_REGION: eu-west-1
У меня нет зарегистрированной папки public / assets, и у меня есть следующая настройка в моем production.rb:
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed (This would involve live compilation and a big performance issue)
config.assets.compile = false
# Generate digests for assets URLs (Fingerprinting)
config.assets.digest = true
# (Heroku requires that this be false)
config.assets.initialize_on_precompile = false
# AWS Bucket
config.action_controller.asset_host = "http://#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
Я установил следующее на Heroku, как указано в README asset_sync:
$heroku labs:enable user-env-compile -a myapp
Что может быть причиной этих проблем и / или как я могу отладить их дальше. Я не вижу способа получить больше информации о том, почему прекомпиляция висит на Heroku.
1 ответ
Оказывается, это была проблема в компиляторе Sass. Он задыхался, не выдавая никакой ошибки. Мне удалось получить немного больше информации, используя шаги, описанные здесь, подождав, пока он не зависнет, и затем завершив процесс. Это дало мне трассировку стека назад к анализатору sass. Думаю, это была какая-то круговая зависимость.