问题发生环境
carrierwave的文件生成目录在capistrano进行cap production deploy之后导致current软链接指向的文件夹中的uploads文件夹消失,导致线上的图片或者是音频文件丢失。
解决方式:
在.gitignore
文件中添加
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config.
/.bundle
# Ignore all logfiles and tempfiles.
/log/*
!/log/.keep
/tmp
/config/*.yml
.DS_Store
public/uploads //这一行,过滤本地对uploads文件夹的修改
在config/deploy.rb
文件夹中添加
# Default value for linked_dirs is []
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')
set :linked_dirs, fetch(:linked_dirs) + %w{public/system public/uploads} //添加这句
然后在shell中跑两句命令:
cap production deploy:check:linked_dirs
cap production deploy:symlink:shared
之后可以去服务器上查看项目中的current
文件夹项目中的public
文件夹里边的uploads
文件夹已经添加了软连接,如下:
uploads -> /服务器上的项目path/shared/public/uploads/
这样就可以避免使用capistrano
命令导致uploads
文件一直丢失的问题.