2012-11-09 7 views
6

Użyłem gem asset_sync i aws, aby wstępnie skompilować moje zasoby. aktywa rake: prekompilacja działa dobrze. Po I pchnął mój aplikację do Heroku iNiezainicjowana stała AssetSync

heroku run rake db:migrate 

otrzymuję następujący błąd

"niezainicjowany stała AssetSync"

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

Po uruchomieniu uruchom wygranych zasobów: prekompiluj po raz pierwszy, wszystkie moje aplikacje/zasoby/obrazy zostały przeniesione do publicznych/aktywów. Usunąłem je z github i dodałem public/assets/* do .gitignore. Czy to może być problem?

Edit: podczas pracy mistrza git Push Heroku, wygląda to tak, jakby były prekompilowana

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) 

Odpowiedz

13

Twój initializer zakłada, że ​​AssetSync jest zawsze zdefiniowany, ale nie będzie to przypadek, czy Gemfile wygląda następująco:

group :assets do 
    gem 'asset_sync' 
end 

dokumentacja asset_sync zaleca owijania inicjatora w:

if defined?(AssetSync) 
... 
end 

To dlatego, że Heroku działa production bez grupy klejnotów assets. Heroku prekompiluje twoje zasoby po uruchomieniu - i jeśli asset_sync jest włączone, zaktualizuje S3 w tym czasie - więc kiedy twoja aplikacja uruchomi się później, nie będzie już potrzebować tych klejnotów. Zatem twój inicjator asset_sync musi poradzić sobie z sytuacją, w której klej nie jest załadowany.

Powiązane problemy