Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将预编译的Rails 3.1资产上载到AmazonS3的Capistrano工作方法_Ruby On Rails_Ruby On Rails 3_Capistrano_Asset Pipeline - Fatal编程技术网

Ruby on rails 将预编译的Rails 3.1资产上载到AmazonS3的Capistrano工作方法

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的有效“配方”示例,但似乎找不到任何

我们有一个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的有效“配方”示例,但似乎找不到任何现代(3.1资产管道兼容)的。我们正在成功地预编译这些资产,但是如何将它们移动到S3?理想情况下,只有那些改变了的

当前“食谱”中的“肉”:


更新capistrano并在部署文件中包含以下内容

load 'deploy/assets'

虽然这并不能直接回答在部署时将资产上载到S3的问题,但我认为以下方法可以满足您的目标,并且实现起来更简单一些

在S3上托管资产并使用
config.action\u controller.asset\u host
指令的主要好处包括(除其他外):

  • 允许额外同时下载资产
  • 为来自无cookie域的资产提供服务
您可以使用来实现相同的好处,而不是使用s3。新的rails资产管道与CloudFront配合得非常好。以下是我目前在生产中使用的步骤:

创建新的CloudFront分发版

  • 交付方式应为下载
  • 选择自定义原点并将其指向web服务器
  • 有关分发详细信息,您可以添加其他CNAME记录,如
    cdn01.mydomain.com
  • 默认根对象可以保留为空
  • 如果您的站点通过SSL提供服务,您将需要使用
    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'