2

Rails アセットを S3 経由で提供することにしました。heroku には、これを行う方法に関する優れたチュートリアルがあります。サイトは現在、Amazon バケットからアセットを提供していますが、を実行する のheroku run rake assets:precompile後に手動で実行する必要がある理由がわかりません。git push heroku masterrake assets:precompile

バケットにないアセットを実行した後git push heroku master、プリコンパイルの出力は次のようになりました。

AssetSync: using default configuration from built-in initializer
       AssetSync: using default configuration from built-in initializer
       rake aborted!
       Fog provider can't be blank, Fog directory can't be blank
       /tmp/build_3vtwfg15g8ajx/vendor/bundle/ruby/1.9.1/gems/asset_sync-0.5.0/lib/asset_sync/asset_sync.rb:29:in `sync'
       /tmp/build_3vtwfg15g8ajx/vendor/bundle/ruby/1.9.1/gems/asset_sync-0.5.0/lib/tasks/asset_sync.rake:3:in `block in <top (required)>'
       Tasks: TOP => assets:precompile:nondigest
       (See full trace by running task with --trace)
       Precompiling assets failed, enabling runtime asset compilation
       Injecting rails31_enable_runtime_asset_compilation

フォグプロバイダーとディレクトリを次のように設定しました:heroku config:add FOG_DIRECTORY=XXX FOD_PROVIDER=AWSそして、heroku config --app を呼び出すと、これが確認されます...したがって、これらのエラーは発生しません。

アセットがバケットに表示されなかったので、実行しました: するとheroku run rake assets:precompile、すべてが警告付きで機能しました:

AssetSync: using default configuration from built-in initializer
AssetSync: Syncing.
[WARNING] fog: the specified s3 bucket name(ss_assets) is not a valid dns name, which will negatively impact performance.  For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/Bucket
Restrictions.html

後でプリコンパイル タスクを常に実行する必要があり、プッシュの失敗に問題はありませんか? ディレクトリ名の警告がプッシュ時に空白のFOGエラーを引き起こしているかどうかを確認します

EDIT また、heroku プッシュの assets:precompile タスクで呼び出された場合、asset_sync には ENV 変数がないようです。プッシュ後にそのタスクを実行すると機能しますが、「面倒」です。

まだ機能していません。最新の試みは ( asset_sync github プロジェクトごと):

lib/tasks/asset_sync.rake.

Rake::Task['assets:precompile'].enhance do
  AssetSync.sync
end

Rake::Task["assets:precompile:nondigest"].enhance do
  AssetSync.sync
end

また、次のような行を production.rb ファイルに追加しようとしました。

  config.asset_sync.aws_bucket = ENV['FOG_DIRECTORY']
  config.asset_sync.fog_provider = ENV['FOG_PROVIDER']

私にとってもうまくいきませんでした。

4

1 に答える 1

10

asset_sync docs Labs セクションから以下を実行します

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

まだ標準としてプラットフォームに導入されていません。

于 2012-12-08T01:01:39.493 に答える