我在使用资产管道和预编译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服务器。 –