ruby-on-rails - 将预编译的 Rails 3.1 Assets 上传到 Amazon S3 的工作 Capistrano 配方

标签 ruby-on-rails ruby-on-rails-3 capistrano asset-pipeline

我们有一个 Rails 3.1 应用程序,允许用户将照片上传到 Amazon S3。由于我们在生产中使用 S3,我想自动(在 cap deploy 上)还将预编译的 Assets (application.js 和 application.css 和图像)上传到我们的 S3 存储桶,在那里它们将被提供。很简单。

超越设置config.action_controller.asset_host = "http://assets.example.com"
简而言之,我正在为 Capistrano 寻找一些可行的“食谱”示例 但似乎找不到任何现代(兼容 3.1 Assets 管道)的。我们已成功预编译 Assets ,但如何将它们移至 S3?而且,理想情况下,只有那些已经改变的?

当前“食谱”的“肉”:

...

after "deploy:update_code", "deploy:pipeline_precompile"
before "deploy:finalize_update", "deploy:copy_database_config"

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
  end

  # copy database.yml into project
  task :copy_database_config do
    production_db_config = "/path_to_config/#{application}.yml"
    run "cp #{production_db_config} #{current_release}/config/database.yml"
    `puts "replaced database.yml with live copy"`
  end
  task :pipeline_precompile do
    run "cd #{release_path}; RAILS_ENV=production bundle exec rake assets:precompile"
  end
end

最佳答案

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

在 S3 上托管 Assets 和使用 config.action_controller.asset_host 的主要好处指令包括(除其他外):

  • 允许额外同时下载 Assets
  • 提供来自无 cookie 域的 Assets

  • 除了使用 s3,您可以使用 CloudFront CDN以获得相同的 yield 。新的 Rails Assets 管道与 CloudFront 配合得非常好。以下是我目前在生产中使用的步骤:

    创建新的 CloudFront 分配
  • 交付方式应为下载
  • 选择自定义来源并将其指向您的 Web 服务器
  • 对于分发详细信息,您可以添加其他 CNAME 记录,例如 cdn01.mydomain.com
  • 默认根对象可以留空

  • 如果您的网站是通过 SSL 提供的,您将需要使用 x12whx1751nfir.cloudfront.net样式主机名作为自定义证书尚不可用,因为它们与 ELB 一样,您的用户将看到证书主机名不匹配错误。如果您不使用 SSL,则可以使用默认主机名或提供的任何 CNAME。

    设置完成后,将从您的服务器获取初始对象请求并将其放置在 CloudFront 中。 Assets 管道生成的摘要指纹将处理您仅发送已更改 Assets 的要求。

    关于ruby-on-rails - 将预编译的 Rails 3.1 Assets 上传到 Amazon S3 的工作 Capistrano 配方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373838/

    相关文章:

    ruby-on-rails - Ruby on Rails 和领域驱动开发

    ruby-on-rails - 无法使用 Devise(Rails 4、devise 3、formtastic、geocoder)在我的 Rails 4 应用程序中编辑用户(帐户更新)的自定义字段

    ruby-on-rails - 如何在 Rails 3 控制台中为记录器输出着色

    ruby-on-rails - Rails - 延迟作业完成

    ruby-on-rails - 如何以myuser ssh身份,但在/home/deployuser中以deployuser身份运行所有Capistrano命令

    ruby-on-rails - Rails、Windows 和 HTTPS

    ruby-on-rails - 带有Rails ajax的pushState

    ruby-on-rails - Rails 5 - 供应商 Assets 未加载到生产中(仅字体)

    ruby-on-rails - Ruby on Rails : Cucumber: how do I turn off the database cleaner?

    ruby-on-rails - Capistrano 3 SSHKit::Runner::ExecuteError: 在主机 [hostname] 上执行时出现异常,代理无法使用请求的身份签署数据