6

gemのasset_syncとawsを使用してアセットをプリコンパイルしました。rakeアセット:プリコンパイルは正常に機能します。アプリをherokuにプッシュした後、

heroku run rake db:migrate

次のエラーが発生します

「初期化されていない定数AssetSync」

initializers / asset_sync.rb

AssetSync.configure do |config|
  config.fog_provider = 'AWS'
  config.aws_access_key_id = "..."
  config.aws_secret_access_key = "..."
  config.fog_directory = Rails.env + "-..."
  config.fog_region = 'eu-west-1'
end

config / Production.rb

config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
config.assets.enabled = true 

run rake Assets:precompileを初めて実行した後、すべてのアプリ/アセット/イメージがpublic/assetsに移動されました。それらをgithubから削除し、public / Assets/*を.gitignoreに追加しました。これが問題になるのでしょうか?

編集:git push heroku masterを実行すると、プリコンパイルされたように見えます

   Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   AssetSync: using /tmp/build_2ltvklj0gaxjp/config/initializers/asset_sync.rb
   AssetSync: using /tmp/build_2ltvklj0gaxjp/config/initializers/asset_sync.rb
   AssetSync: Syncing.
   Using: Directory Search of /tmp/build_2ltvklj0gaxjp/public/assets
   Uploading: assets/application-7e17d9f0ed9cb7ea50b750e2bfc7e28c.css.gz
   Uploading: assets/application-7e17d9f0ed9cb7ea50b750e2bfc7e28c.css
   AssetSync: Done.
   Asset precompilation completed (58.04s)
4

1 に答える 1

13

イニシャライザは、AssetSyncが常に定義されていることを前提としていますが、Gemfile次のようになっている場合はそうではありません。

group :assets do
  gem 'asset_sync'
end

ドキュメントでは、イニシャライザを次のasset_syncようにラップすることを推奨しています。

if defined?(AssetSync)
...
end

これは、Herokuが宝石productionのグループなしで実行されるためです。assetsHerokuは、プッシュを実行するときにアセットをプリコンパイルします。asset_sync有効にすると、その時点でS3が更新されるため、アプリケーションが後で起動したときに、それらのgemは不要になります。したがって、asset_sync初期化子は、gemがロードされていない状況を処理する必要があります。

于 2012-11-09T14:37:56.197 に答える