我正在使用 Rails 4 和 assets_sync (使用 Fog )将 Amazon S3 用于我的资产。 S3存储桶位于“ eu-west-1 ”(爱尔兰)。
在 production.rb 和 development.rb 环境中,我设置了以下行(BUCKETNAME为实际存储桶名称):
config.action_controller.asset_host = "http://s3-eu-west-1.amazonaws.com/BUCKETNAME"
另外,我已经设置了下一个环境变量:AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,FOG_DIRECTORY,FOG_PROVIDER(以及FOG_REGION = eu-west-1在绝望的尝试中)。
无论我做什么,我都会收到以下错误(已经posted in StackOverflow这个答案对我没有帮助)
rake assets:precompile
[WARNING] fog: followed redirect to BUCKETNAME.s3-external-3.amazonaws.com, connecting to the matching region will be more performant
[WARNING] fog: followed redirect to BUCKETNAME.s3-external-3.amazonaws.com, connecting to the matching region will be more performant
rake aborted!
Connection reset by peer (Errno::ECONNRESET)
(... more trace details ...)
尽管存在此错误,但资产有时会上传(如 application-7d888bd5c98564a528d102954bf2061a.css ),无论如何都可以,因为应用程序以这种方式链接资产:
<link data-turbolinks-track="true" href="//s3-eu-west-1.amazonaws.com/BUCKETNAME/assets/application.css?body=1" media="all" rel="stylesheet" />
如果有帮助,我在生产中启用了以下选项: config.assets.compile = false config.assets.digest = true
任何可以帮助我接近解决方案的建议?
答案 0 :(得分:4)
配置Fog S3端点:
如果您使用Heroku:
heroku config:add FOG_REGION=eu-west-1
如果您使用自定义Rails初始化程序(config / initializers / asset_sync.rb):
AssetSync.configure do |config|
config.fog_region = 'eu-west-1'
有关其他详细信息,请参阅:
https://github.com/rumblelabs/asset_sync#built-in-initializer-environment-variables
至于asset_host
配置,我认为您当前的设置应该有效,但assets_sync readme有以下注释:
在非默认S3存储区域中:如果您的存储区设置为某个区域 这不是默认的美国标准(us-east-1),你必须使用第一个 网址风格//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com或亚马逊将 在请求资产时返回301永久移动。请注意 请注意以上关于桶名称和期间的信息。
因此,如果您在申请资产时看到任何301重定向,请尝试:
config.action_controller.asset_host = "//BUCKETNAME.s3.amazonaws.com"