我有一个用户上传图像的应用程序,它们通过 CarrierWave 存储到名为 uploads/images/ 的文件夹中的公共文件夹中。
我刚刚注意到,自从我最近一次部署以来,上传(和图像)文件夹不再存在。
当我使用 Capistrano 部署时,它会删除生产服务器上的文件夹和文件吗?
我如何告诉它在所有部署中保持相同的 public/uploads 文件夹?
谢谢堆栈!
我有一个用户上传图像的应用程序,它们通过 CarrierWave 存储到名为 uploads/images/ 的文件夹中的公共文件夹中。
我刚刚注意到,自从我最近一次部署以来,上传(和图像)文件夹不再存在。
当我使用 Capistrano 部署时,它会删除生产服务器上的文件夹和文件吗?
我如何告诉它在所有部署中保持相同的 public/uploads 文件夹?
谢谢堆栈!
I would recommend making a capistrano task that creates a symlink to the shared folder. The symlink will act as a link to the directory, so all your upload storage/retrieval code will work as normal.
Capistrano task example:
before "deploy:restart", :symlink_directories
task :symlink_directories do
run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads"
end
我想为那些希望对 Capistrano v3.9.1 做同样事情的人更新这个答案
在您的 deploy.rb 文件中,您可以添加以下内容
set :linked_dirs, %w{public/uploads/}
如上面的答案,这在部署期间将目录符号链接到版本中。
非常适合我们不想覆盖内容的上传目录。
有关您可以“设置”的完整变量列表,请参见capistrano 文档。