1

我正在使用Rails 4assets_sync(使用Fog)将Amazon S3用于我的资产。S3 存储桶位于“ eu-west-1 ”(爱尔兰)。

production.rbdevelopment.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 拼命尝试)。

不管我做什么,我都会收到以下错误(已在 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

有什么建议可以帮助我接近解决方案吗?

4

1 回答 1

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 自述文件有以下注释:

在非默认 S3 存储桶区域:如果您的存储桶设置为不是默认美国标准 (us-east-1) 的区域,您必须使用第一种 url 样式 //#{ENV['FOG_DIRECTORY']}.s3当请求资产时,.amazonaws.com 或 amazon 将返回 301 永久移动。请注意上面关于存储桶名称和句点的警告。

因此,如果您在请求资产时确实看到任何 301 重定向,请尝试:

config.action_controller.asset_host = "//BUCKETNAME.s3.amazonaws.com"
于 2013-09-11T06:10:52.560 回答