我正在思考如何使用asset pipeline和precompile Capistrano任务部署大型应用程序的问题。
以下是我的一些需求:
1.我不想在每个生产服务器上安装javascript运行环境并预编译资产。
2.资产需要上传到两个Nginx服务器,这两个服务器都没有该应用程序的副本。
因此,我创建了一个Capistrano任务,该任务可以在本地预编译资产,然后将资产上传到Nginx服务器,同时将清单文件上传到应用服务器。但是,问题在于,我本地机器上的资产可能与我正在部署的git分支上的资产不同。
有没有更好的方法来解决这个问题?或者我必须始终确保从正确的干净分支部署?
下面是执行预编译和上传的Capistrano任务:
以下是我的一些需求:
1.我不想在每个生产服务器上安装javascript运行环境并预编译资产。
2.资产需要上传到两个Nginx服务器,这两个服务器都没有该应用程序的副本。
因此,我创建了一个Capistrano任务,该任务可以在本地预编译资产,然后将资产上传到Nginx服务器,同时将清单文件上传到应用服务器。但是,问题在于,我本地机器上的资产可能与我正在部署的git分支上的资产不同。
有没有更好的方法来解决这个问题?或者我必须始终确保从正确的干净分支部署?
下面是执行预编译和上传的Capistrano任务:
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