我在使用資產管道和預編譯Capistrano任務部署大型應用程序的想法陷入困境。Rails 3.1資產管道生產無法使用javascript運行時環境
我不想安裝javascript運行時環境並預編譯每個生產服務器上的資產。
資產需要上傳到兩個沒有應用程序副本的Nginx服務器。
所以我創建了一個Capistrano的任務在本地預編譯的資產,然後上傳資產的Nginx的服務器和清單文件到應用服務器。
問題是我本地計算機上的資產可能與我部署的git分支資產不同。
有沒有更好的方法,或者我是否只是爲了始終從正確的清潔分支進行部署?這裏
編輯是帽任務,做預編譯,並上傳
namespace :assets do
after "deploy:update_code", "assets:precompile"
after "assets:precompile", "assets:upload_assets"
after "assets:precompile", "assets:upload_manifest"
desc "precompile assets"
task :precompile do
run_locally("bundle exec rake assets:clean && bundle exec rake assets:precompile RAILS_ENV=#{rails_env}")
end
desc "precompile and upload assets to webserver"
task :upload_assets, :roles => :nginx do
top.upload("public/assets", "/usr/local/fieldphone/#{rails_env}/", :via => :scp, :recursive => true)
end
#
desc "upload manifest file"
task :upload_manifest, :roles => :app do
top.upload("public/manifest.yml", "#{release_path}/public/", :via => :scp)
end
end
資產可能會有所不同,因爲源青菜和咖啡文件可能有最近的變化(未提交的修改,未跟蹤文件等)。我傾向於承諾編譯的資產(但也覺得很髒)。我認爲不必在生產服務器上編譯資產,然後將它們從生產服務器scp到正確的位置(nginx服務器)。 –
如果沒有編譯的文件,那麼所有的資源都是動態提供的。這沒有發生?另外,如果您使用主分支作爲生產/穩定,那麼我沒有發現提交它們的任何錯誤。 –
在開發中是的,它們是動態服務的。在生產中,它們不能動態地提供服務nginx提供預編譯的文件。我只想提出一種更好的方式來預編譯它們並將它們上傳到nginx服務器。 –