【发布时间】:2011-01-10 15:06:05
【问题描述】:
每次我在远程服务器上运行 cap deploy 时,我都会丢失一些未版本控制的文件,因为 capistrano 会创建一个新目录并检查其中的头版本。但是有些文件没有版本控制,例如用户头像(回形针)和上传的图像,它们不会被复制到新的当前版本中。
我该如何解决这个问题?
谢谢!
【问题讨论】:
标签: ruby-on-rails deployment capistrano
每次我在远程服务器上运行 cap deploy 时,我都会丢失一些未版本控制的文件,因为 capistrano 会创建一个新目录并检查其中的头版本。但是有些文件没有版本控制,例如用户头像(回形针)和上传的图像,它们不会被复制到新的当前版本中。
我该如何解决这个问题?
谢谢!
【问题讨论】:
标签: ruby-on-rails deployment capistrano
就我个人而言,我认为处理这类事情的最佳方法是将它们存储在共享文件夹中,并在 capistrano 中创建一个任务来创建指向共享资产的符号链接。
这是我的一个项目中的一个示例:
set :shared_assets, %w{public/images/products public/images/barcodes}
namespace :assets do
namespace :symlinks do
desc "Setup application symlinks for shared assets"
task :setup, :roles => [:app, :web] do
shared_assets.each { |link| run "mkdir -p #{shared_path}/#{link}" }
end
desc "Link assets for current deploy to the shared location"
task :update, :roles => [:app, :web] do
shared_assets.each { |link| run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}" }
end
end
end
before "deploy:setup" do
assets.symlinks.setup
end
before "deploy:symlink" do
assets.symlinks.update
end
【讨论】:
将路径添加到 shared_children 也可以,实际上只是 deploy.rb 中的一条线:
set :shared_children, shared_children + %w{public/uploads}
在这里找到它:astonj
【讨论】:
这是一个非常实用的小宝石:https://github.com/teohm/capistrano-shared_file。查看 gem 的文档——一切都很简单。
安装 gem,在 deploy.rb 中需要它,并在 shared_files 选项中提供您希望在版本之间共享的文件数组:
set :shared_files, %w(config/database.yml)
将您的文件存储在<project_dir>/shared/files/YOUR_FILE_GOES_HERE。并且它们将在每次部署时符号链接到您的应用程序的根目录。就是这样。
【讨论】: