2012-11-09 31 views
6

Tôi đã sử dụng phần tử gem_sync và aws để biên dịch trước tài sản của tôi. tài sản cào: tiền biên dịch hoạt động tốt. Sau khi tôi đẩy ứng dụng của tôi để Heroku vàUninitialized hằng số AssetSync

heroku run rake db:migrate 

tôi nhận được lỗi sau

"uninitialized AssetSync liên tục"

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 

Sau khi chạy tài sản chạy rake: biên dịch trước lần đầu tiên, tất cả ứng dụng/tài sản/hình ảnh của tôi đã được chuyển sang công khai/tài sản. Tôi đã xóa chúng khỏi github và thêm public/assets/* vào .gitignore. Có thể đây là vấn đề?

Edit: khi chạy chủ git push Heroku, có vẻ như họ đã biên dịch sẵn

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) 

Trả lời

13

initializer bạn giả định rằng AssetSync luôn xác định, nhưng điều này sẽ không phải là trường hợp nếu Gemfile của bạn trông giống như:

group :assets do 
    gem 'asset_sync' 
end 

các tài liệu asset_sync khuyến gói initializer trong:

if defined?(AssetSync) 
... 
end 

Điều này là do Heroku chạy production mà không có nhóm đá quý assets. Heroku biên dịch trước các tài sản của bạn khi bạn chạy một push - và nếu asset_sync được kích hoạt, nó sẽ cập nhật S3 tại thời điểm đó - vì vậy khi ứng dụng của bạn khởi chạy sau, nó không còn cần những viên đá quý đó nữa. Do đó, trình khởi tạo asset_sync của bạn cần xử lý tình huống mà đá quý không được tải.

Các vấn đề liên quan