我正在使用capistrano部署Rails应用程序并在本地编译资产并使用rsync将它们复制到服务器。这是预编译中发生的事情
desc 'Run the precompile task locally and rsync with shared'
task :precompile, :roles => :web, except: { no_release: true } do
run "rm -f #{shared_path}/assets/manifest*"
%x{RAILS_ENV=production bundle exec rake assets:precompile}
%x{rsync -rave "ssh -i #{ssh_options[:keys][0]}" public/assets #{user}@#{domain}:#{shared_path}}
%x{RAILS_ENV=production bundle exec rake assets:clean}
%x{rm -rf public/assets}
end
部署完成后,资源在服务器上显示正常,但rails应用程序不显示最新的资产文件。它显示上一个清单文件中的文件。我通过在capistrano中运行运行“rm -f#{shared_path} / assets / manifest *”来删除旧的清单文件,但rails应用程序没有选择新的清单。我缺少什么,如何在部署后强制它使用最新的清单文件。
答案 0 :(得分:1)
据我所知:
deploy:assets:update_asset_mtimes
任务您需要做的是:
manifest.*json
文件release_path
assets_manifest.json
:clean_expired
的根目录下的每个版本制作清单副本。第2章需要:rollback
和manifest*.json
我能够通过删除deploy:assets:symlink
任务之前的{{1}}文件来解决此问题。 capistrano-local-precompile宝石就是这一点。请参阅:remove_manifest
task并参考问题#3,因为它不太正确。
答案 1 :(得分:0)
FWIW我们通过在application.rb中设置显式清单来解决这个问题:
config.assets.manifest = File.join('config', '.sprockets-manifest.json')