2012-11-09 14 views
6

Ho usato la gem asset_sync e aws per precompilare le mie risorse. rake assets: precompilare funziona bene. Dopo che ho spinto la mia app per Heroku, eCostante non inizializzata AssetSync

heroku run rake db:migrate 

ottengo il seguente errore

"inizializzata costante AssetSync"

inizializzatori/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 

Dopo l'esecuzione, eseguire attività rake: precompila la prima volta, tutte le mie app/risorse/immagini sono state spostate su pubblico/risorse. Li ho cancellati da github e aggiunto public/assets/* a .gitignore. Questo potrebbe essere il problema?

Edit: quando si esegue maestro git push Heroku, sembra che sono stati precompilati

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) 

risposta

13

tuo initializer presuppone che AssetSync è sempre definito, ma questo non sarà il caso se il vostro Gemfile assomiglia:

group :assets do 
    gem 'asset_sync' 
end 

la documentazione asset_sync raccomanda avvolgendo l'inizializzatore in:

if defined?(AssetSync) 
... 
end 

Questo perché Heroku corre production senza il gruppo assets di gemme. Heroku precompila le tue risorse quando esegui un push - e se asset_sync è abilitato, aggiornerà S3 in quel momento - quindi quando l'applicazione verrà avviata in seguito, non avrà più bisogno di quelle gemme. Pertanto, l'inizializzatore asset_sync deve gestire la situazione in cui la gemma non viene caricata.

Problemi correlati