我有一个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
时,当前链接到新版本将不再具有uploads目录。我使用carrierwave
gem进行图片上传。
我能想到的唯一解决方案是让capistrano在部署之后运行一个脚本,将目录从旧版本移动到最新版本。
或者
在应用程序之外放置uploads
目录。 (如果是,那么最好/最安全的位置是什么?)
我想知道哪种解决方案更好,或者是否有更好的选择。
干杯
答案 0 :(得分:2)
您要查找的方法称为linked_dirs
。
它接受一个Array
个目录,并且会为每个连续部署中指定的目录创建一个符号链接,对于那些应该保留的目录,即使其他代码更新也是如此。
当您部署它所执行的操作时,它会运行deploy:check:linked_dirs
以确认路径存在和/或创建它。然后它运行deploy:symlink:linked_dirs
,它会为此目录创建一个符号链接。
您可以在Official Documentation中找到它。可以找到佣金任务Here