2

Heroku デプロイメント (Rails 3.2.3) で asset_sync gem を使用しています。プリコンパイルはローカルでうまく機能します (アセットを 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"

asset_sync の README に記載されているように、Heroku で次のように設定しました。

$heroku labs:enable user-env-compile -a myapp

これらの問題の原因と/またはさらにデバッグするにはどうすればよいですか。プリコンパイルが Heroku で停止している理由について、詳細な情報を取得する方法がわかりません。

4

1 に答える 1

1

Sass コンパイラの問題であることがわかりました。エラーをスローすることなく、何かを窒息させていました。hereで説明されている手順を使用して、ハングするまで待ってからプロセスを終了することで、もう少し情報を取得することができました。これにより、sass パーサーに戻るスタック トレースが得られました。ある種の循環依存であると考えてください。

于 2012-11-15T18:24:53.630 に答える