2014-10-02 100 views
1

我在heroku上構建了一個rails應用程序,並且想要將js,css和圖像文件部署到Amazon上的存儲桶中。我還沒有找到這方面的許多資源,但我正在使用此(2012)教程進行指導; https://firmhouse.com/blog/complete-guide-to-serving-your-rails-assets-over-s3-with-asset_syncAsset_Sync沒有推送到S3

該網站目前主要是css和js。這是我的代碼到目前爲止;

production.rb

Rails.application.configure do 

config.action_controller.asset_host = "http://localize.s3.amazonaws.com" 

config.cache_classes = true 

config.consider_all_requests_local  = false 
config.action_controller.perform_caching = true 

config.serve_static_assets = false 

config.assets.compress = true 

config.assets.compile = false 

config.assets.digest = true 

end 

初始化/ asset_sync.rb

if defined?(AssetSync) 
AssetSync.configure do |config| 
    config.fog_provider = ENV['FOG_PROVIDER'] 
    config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID'] 
    config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] 
    config.fog_directory = ENV['FOG_DIRECTORY'] 
    config.fog_region = ENV['FOG_REGION'] 

# Don't delete files from the store 
config.existing_remote_files = "delete" 

# Automatically replace files with their equivalent gzip compressed version 
config.gzip_compression = true 

# Use the Rails generated 'manifest.yml' file to produce the list of files to 
# upload instead of searching the assets directory. 
config.manifest = true 

config.custom_headers = { '.*' => { cache_control: 'max-age=31536000', expires: 1.year.from_now.httpdate } } 
end 
end 

的Heroku瓦爾

AWS_ACCESS_KEY_ID:   ***************** 
AWS_SECRET_ACCESS_KEY:  ***************************** 
FOG_DIRECTORY:    localize 
FOG_PROVIDER:     AWS 
FOG_REGION:     us-west-2 

周的Gemfile

gem 'rails', '4.1.1' 
gem 'uglifier', '>= 1.3.0' 
gem 'jquery-rails' 
gem 'sdoc', '~> 0.4.0', group: :doc 

#aws 
gem "fog", "~>1.20" 
gem 'asset_sync' 

group :development do 
    gem 'thin' 
end 

group :production do 
    gem 'newrelic_rpm' 
    gem 'rails_12factor' 
    gem 'pg' 
end 

我也跑:

heroku config:add FOG_PROVIDER=AWS AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=yyy 

隨着

heroku config:add FOG_DIRECTORY=localize 

,然後當我運行

bundle exec rake assets:precompile 

或者

RAILS_ENV=production bundle exec rake assets:precompile 

我得到這個輸出;

rake aborted! 
AssetSync::Config::Invalid: Fog directory can't be blank, Aws access key can't be blank, Aws secret access key can't be blank 

任何人誰擁有軌道,Heroku的經驗,和S3誰可以指導我在正確的方向,將不勝感激。提前致謝。

+0

shouldnt config.fog_directory = ENV ['localize']是config.fog_directory = ENV ['FOG_DIRECTORY']? – Richlewis 2014-10-02 08:44:52

+0

並閱讀heroku文檔以獲取可能需要做的heroku服務器上的VARS heroku config:set FOG_DIRECTORY =本地化例如..你檢查瞭如果使用config:add實際上已經通過做heroku配置添加VARS到heroku服務器:得到FOG_DIRECTORY或者做heroku config查看你上傳的所有VARS – Richlewis 2014-10-02 08:47:45

+0

@Richlewis是的,我將代碼改爲config.fog_directory = ENV ['FOG_DIRECTORY']。我還運行了heroku config:add和heroku config:設置爲FOG_DIRECTORY,FOG_PROVIDER,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。我現在得到的錯誤是'rake中止了! AssetSync :: Config ::無效:Aws訪問密鑰不能爲空,Aws祕密訪問密鑰不能爲空,所以它在FOG上工作,但不是AWS – user3749994 2014-10-03 04:33:59

回答

0

好吧看你的設置似乎有幾件事情錯了,生病添加什麼我通常使用,並希望它會幫助你

Production.rb

ExampleApp::Application.configure do 

config.action_controller.asset_host = "http://exampleapp.s3.amazonaws.com" 

config.cache_classes = true 

config.consider_all_requests_local  = false 
config.action_controller.perform_caching = true 

config.serve_static_assets = true 

config.assets.compress = true 

config.assets.compile = true 

config.assets.digest = true 

end 

asset_sync.rb

if defined?(AssetSync) 
AssetSync.configure do |config| 
    config.fog_provider = ENV['FOG_PROVIDER'] 
    config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID'] 
    config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] 
    config.fog_directory = ENV['FOG_DIRECTORY'] 
    config.fog_region = ENV['FOG_REGION'] 

# Don't delete files from the store 
config.existing_remote_files = "delete" 

# Automatically replace files with their equivalent gzip compressed version 
config.gzip_compression = true 

# Use the Rails generated 'manifest.yml' file to produce the list of files to 
# upload instead of searching the assets directory. 
config.manifest = true 

config.custom_headers = { '.*' => { cache_control: 'max-age=31536000', expires: 1.year.from_now.httpdate } } 
end 
end 
+0

不幸運:(但感謝您的幫助,因爲這不起作用,你知道我是否要擺脫所有s3相關的東西(寶石,初始化器等),然後像以前一樣預先編譯資產,它會恢復正常嗎? – user3749994 2014-10-03 10:02:36

+0

我真的不能看到爲什麼這不起作用,這是你用亞馬遜設置的第一個桶嗎?你有其他人在工作嗎?有點顯而易見,但我認爲我會檢查,你有沒有設置他們的賬單,以便他們可以收取使用費? – Richlewis 2014-10-03 10:06:53

+0

是的,這是第一次使用AWS,我通常只使用heroku,但由於有很多圖像,js和css,所以速度很慢,所以我想加快速度(聽過s3是如何做到這一點)。我註冊了免費套餐,因爲這是我使用s3的唯一網站。s3 – user3749994 2014-10-03 10:10:33