Ruby on rails 将预编译的Rails 3.1资产上载到AmazonS3的Capistrano工作方法
我们有一个Rails 3.1应用程序,允许用户将照片上传到Amazon S3。由于我们在生产中使用S3,我想自动(在Ruby on rails 将预编译的Rails 3.1资产上载到AmazonS3的Capistrano工作方法,ruby-on-rails,ruby-on-rails-3,capistrano,asset-pipeline,Ruby On Rails,Ruby On Rails 3,Capistrano,Asset Pipeline,我们有一个Rails 3.1应用程序,允许用户将照片上传到Amazon S3。由于我们在生产中使用S3,我想自动(在cap deploy上)将预编译的资产(application.js和application.css和image)上传到S3存储桶中,并在那里提供服务。很简单 超出设置config.action\u controller.asset\u host=”http://assets.example.com“ 简而言之,我正在寻找一些Capistrano的有效“配方”示例,但似乎找不到任何
cap deploy
上)将预编译的资产(application.js和application.css和image)上传到S3存储桶中,并在那里提供服务。很简单
超出设置config.action\u controller.asset\u host=”http://assets.example.com“
简而言之,我正在寻找一些Capistrano的有效“配方”示例,但似乎找不到任何现代(3.1资产管道兼容)的。我们正在成功地预编译这些资产,但是如何将它们移动到S3?理想情况下,只有那些改变了的
当前“食谱”中的“肉”:
更新capistrano并在部署文件中包含以下内容
load 'deploy/assets'
虽然这并不能直接回答在部署时将资产上载到S3的问题,但我认为以下方法可以满足您的目标,并且实现起来更简单一些 在S3上托管资产并使用
config.action\u controller.asset\u host
指令的主要好处包括(除其他外):
- 允许额外同时下载资产
- 为来自无cookie域的资产提供服务
cdn01.mydomain.com
等x12whx1751nfir.cloudfront.net
样式的主机名,因为自定义证书与ELB一样不可用,并且您的用户将看到证书主机名不匹配错误。如果不使用SSL,则可以使用默认主机名或提供的任何CNAMEs
设置完成后,将从服务器获取初始对象请求并将其放置在CloudFront中。资产管道生成的摘要指纹将处理您只发送已更改资产的要求 如果您想使用S3,请查看gem。我正试图让我的工作,但有一些问题。你可以使用gem。我配置并使用了它。它非常完美,而且配置非常简单。据我所知,它只处理预编译制作
RAILS\u ENV=production bundle exec rake assets:precompile
在我上面的示例中,是冗余的。也许我错了?如果是这样的话,我很想知道这条小线是如何自动验证资产并将其上传到S3存储桶的?!?哦,突然,这是一个没有充分阅读问题的案例。你不能使用cloud front自动镜像域上的资产吗?+1个很好的答案。您能否再详细说明一下,或者指向“如果您的站点通过SSL提供服务,您将需要使用x12whx1751nfir.cloudfront.net”的任何链接?谢谢设置CloudFront发行版时,将创建一个随机主机名,例如x12whx1751nfir.CloudFront.net
。您可以选择附加自定义CNAME dns记录,例如cdn.mydomain.com
。如果您在网站上使用SSL,则必须通过SSL为所有资产提供服务,否则用户将收到混合内容警告。CloudFront不支持自定义SSL证书,因此您经常使用同时支持HTTP和HTTPS的x12whx1751nfir.CloudFront.net
主机名。如果不使用SSL,则可以使用自定义CNAME记录,如cdn.mydomain.com
。我希望这会有所帮助。所以基本上你是说,对于我的ssl内容,我应该将它们称为“ht”tps://x12whx1751nfir.cloudfront.net/assets/whatever.jpg“?将CloudFront设置为资产主机时,需要在config/environments/production.rb
文件中配置config.action\u controller.asset\u host
指令。如果在生产中使用SSL,它应该如下所示:config.action\u controller.asset\u host=”https://x12whx1751nfir.cloudfront.net“
。如果不使用SSL,可以使用相同的主机名,也可以使用自定义的CNAME,例如:config.action\u controller.asset\u host=”http://cdn.mydomain.com“
甚至config.action\u controller.asset\u host=”http://cdn%d.mydomain.com“
如果您有多条CNAME记录。有关详细信息,请参阅或。
load 'deploy/assets'