2013-09-24 105 views
3

最近我将应用程序从Rails 3升级到了Rails 4.在部署脚本中,我预先编译了本地资产,然后将它们rsync同步到服务器。在Rails 4中,资产管道现在生成manifest- <random> .json而不是manifest.yml。由于清单文件的命名方式不同,因此会将多个manifest.json文件添加到共享资产目录。应用程序然后选择错误的清单文件,并提供旧资产。如何在Capistrano 2中部署Rails 4并在本地预编译资产

我看过一些github上拉请求的线程与此相关的各种问题:

我的选择似乎是:

  1. 不要共享资产目录。

    这会破坏旧客户端的旧资源请求。

  2. 切换到编译服务器上的资产。

    这会增加服务器的复杂性。

  3. 将清单文件移动到共享资产目录之外。

    我后来了解到,这个选项是Rails中取出4

对于这个问题还有其他的解决方案?

回答

2

我在查看标准capistrano导轨资产预编译任务后找到了最佳答案。我向本地预编译任务添加了一个命令,将旧资产清单作为asset_manifest.json移动到当前版本。新版上传时只剩下一个清单。

run "mv -- #{shared_manifest_path.shellescape} #{current_path.to_s.shellescape}/assets_manifest#{File.extname(shared_manifest_path)}".compact

移动清单,以.json到current_dir为asset_manifest.json允许Capistrano的恢复回滚正确的清单文件。

+1

你能显示你的任务的完整来源吗? –

+0

@AndreiVaranovich https://gist.github.com/codingfoo/9494072 – codingFoo

相关问题