![](/img/trans.png)
[英]Rails 3.1 asset pipeline: other assets on Amazon S3 demanding to be precompiled?
[英]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
指令的主要好處包括(其中包括):
您可以使用CloudFront CDN獲得相同的好處,而不是使用s3。 新的rails資產管道與CloudFront非常匹配。 以下是我目前在制作中使用的步驟:
創建新的CloudFront分配
cdn01.mydomain.com
等。 如果您的站點是通過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.