2012-11-09 17 views
6

Ich habe das Gem Asset_sync und AWS verwendet, um meine Assets vorzukompilieren. Rake Assets: Precompile funktioniert gut. Nachdem ich schob meine App Heroku undNicht initialisierte Konstante AssetSync

heroku run rake db:migrate 

ich folgende Fehlermeldung

"nicht initialisierte Konstante 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 

erhalten config/production.rb

Nach dem Ausführen von run Rake Assets: Vorkompilieren beim ersten Mal, alle meine App/Assets/Bilder wurden auf öffentliche/Assets verschoben. Ich habe sie aus GitHub gelöscht und public/assets/* zu .gitignore hinzugefügt. Kann das das Problem sein?

Edit: wenn git push Heroku Master läuft, sieht es aus wie sie

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) 

Antwort

13

Ihre initializer vorkompilierte wurden davon ausgeht, dass AssetSync immer definiert ist, aber dies wird nicht der Fall sein, wenn Ihr Gemfile wie folgt aussieht:

group :assets do 
    gem 'asset_sync' 
end 

die asset_sync Dokumentation empfiehlt die Initialisierung in Einwickeln:

if defined?(AssetSync) 
... 
end 

Dies ist, weil Heroku production ohne die assets Gruppe von Edelsteinen läuft. Heroku prekompiliert Ihre Assets, wenn Sie einen Push ausführen - und wenn asset_sync aktiviert ist, wird S3 zu diesem Zeitpunkt aktualisiert. Wenn Ihre Anwendung später gestartet wird, sind diese Edelsteine ​​nicht mehr erforderlich. Daher muss Ihr asset_sync Initialisierer die Situation behandeln, in der der Edelstein nicht geladen ist.

Verwandte Themen