簡體   English   中英

使用Capistrano配方將預編譯的Rails 3.1資產上載到Amazon S3

[英]Working Capistrano recipe for uploading precompiled Rails 3.1 assets to Amazon S3

我們有一個Rails 3.1應用程序,允許用戶將照片上傳到Amazon S3。 由於我們在生產中使用S3,我想自動(在cap deploy )也將預編譯的資產(application.js和application.css&images)上傳到我們的S3存儲桶中。 很簡單。

除了設置config.action_controller.asset_host = "http://assets.example.com"

簡而言之, 我正在尋找Capistrano工作“配方”的一些例子,但似乎找不到任何現代的(3.1資產管道兼容)。 我們成功預編制了資產但是如何將它們移到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

雖然這並沒有直接回答在部署時將資產上傳到S3的問題,但我認為以下方法可能會解決您的目標並且實施起來更簡單一些。

在S3上托管資產和使用config.action_controller.asset_host指令的主要好處包括(其中包括):

  • 允許額外同時下載資產
  • 從無cookie域提供資產

您可以使用CloudFront CDN獲得相同的好處,而不是使用s3。 新的rails資產管道與CloudFront非常匹配。 以下是我目前在制作中使用的步驟:

創建新的CloudFront分配

  1. 交付方式應該下載
  2. 選擇Custom Origin並將其指向您的Web服務器
  3. 對於分發詳細信息,您可以添加其他CNAME記錄,例如cdn01.mydomain.com等。
  4. 默認根對象可以留空

如果您的站點是通過SSL提供的,則需要使用x12whx1751nfir.cloudfront.net樣式的主機名,因為自定義證書不可用,因為它們與ELB一起使用,您的用戶將看到證書主機名不匹配錯誤。 如果您不使用SSL,則可以使用默認主機名或任何產生的CNAME。

設置完成后,將從您的服務器獲取初始對象請求並將其置於CloudFront中。 資產管道生成的摘要指紋將處理您僅發送已更改資產的要求。

更新capistrano並在部署文件中包含以下內容

load 'deploy/assets'

如果要使用S3,請查看asset_sync gem。 我試圖讓我的Rackspace Cloud Files工作 ,但有一些問題。

你可以使用jammit-s3 gem。 我配置並使用它。 它非常完美,配置非常簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM