3

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

我在一些 github 拉取请求线程中阅读了与此相关的各种问题:

我的选择似乎是:

  1. 不要共享资产目录。

    这会破坏要求旧资源的老客户。

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

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

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

    从那以后,我了解到这个选项在 Rails 4 中被删除了。

这个问题还有其他解决方案吗?

4

1 回答 1

2

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

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

将 manifest-.json 作为 assets_manifest.json 移动到 current_dir 允许 capistrano 在回滚时恢复正确的清单文件。

于 2013-09-26T21:13:22.773 回答