使用 capistrano 部署新修订时,将上传目录保持在 public 下

Keep uploads directory under public while deploying new revisions using capistrano

我有一个 Rails 应用程序并在生产服务器上使用 Apache2 + Passenger + Capistrano:

.
├── current -> releases/20150527234152
|   ├── app
|   ├── db
|   ├── lib
|   ├── ...
|   └── public
|       ├── assets
|       └── uploads
|           ├── 01.jpg
|           ├── 02.jpg
|           ├── 03.jpg
|           └── ...
├── releases
|   ├── 20150527212555
|   ├── 20150527230415
|   └── 20150527234152
├── repo
└── shared

我没有跟踪 public/uploads 目录(用户上传图片的地方)。因此,每当我执行 cap production deploy 时,指向新版本的当前链接将不再具有上传目录。我正在使用 carrierwave gem 进行图片上传。

我能想到的唯一解决方案是在部署后使用 capistrano 运行 脚本,将目录从旧版本移动到最新版本。

在应用程序之外有 uploads 目录。 (如果有,它的 best/safest 位置是什么?)

我想知道哪种方案更好,或者有没有更好的选择。

干杯

您要找的方法叫做linked_dirs

它接受 Array 个目录,并将创建一个符号链接到每个连续部署中指定的目录,适用于即使在其他代码更新时也应该保留的目录,就像您上传的情况一样。

当您部署它时,它会运行 deploy:check:linked_dirs 以确认路径存在 and/or 创建它。然后它运行 deploy:symlink:linked_dirs,创建一个指向该目录的符号链接。

您可以在 Official Documentation. The Rake Tasks can be Found Here

中找到它