使用capistrano

时间:2015-05-28 00:51:11

标签: ruby-on-rails ruby capistrano passenger carrierwave

我有一个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目录。 (如果是,那么最好/最安全的位置是什么?)

我想知道哪种解决方案更好,或者是否有更好的选择。

干杯

1 个答案:

答案 0 :(得分:2)

您要查找的方法称为linked_dirs

它接受一个Array个目录,并且会为每个连续部署中指定的目录创建一个符号链接,对于那些应该保留的目录,即使其他代码更新也是如此。

当您部署它所执行的操作时,它会运行deploy:check:linked_dirs以确认路径存在和/或创建它。然后它运行deploy:symlink:linked_dirs,它会为此目录创建一个符号链接。

您可以在Official Documentation中找到它。可以找到佣金任务Here