使用 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
中找到它
我有一个 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
中找到它