【问题标题】:Keeping static files in server when deploying with Capistrano使用 Capistrano 部署时将静态文件保存在服务器中
【发布时间】:2008-11-04 19:13:46
【问题描述】:
我通过 Web 界面不断地将文件上传到 Rails 应用程序的 public/files 文件夹。
我不想将这些文件保存在源代码管理中,因为它们几乎需要 2 GB,所以每次我执行 cap deploy 时,它都会将这些文件保存在 releases/ 中,并用存储的原始副本替换目录在存储库中。
我想知道将这些文件保存在服务器中current 目录中的最佳方法是什么。我的一些想法是:
- 从源代码管理中删除目录并将其替换为指向不受 Capistrano 管理的外部目录的链接。
- 创建 Capistrano 任务以在部署前将目录复制到 /tmp,然后在部署完成后将其复制回 /public。
有标准的方法吗?
【问题讨论】:
标签:
ruby-on-rails
capistrano
release-management
【解决方案1】:
为了以后的记录,这是我以前用共享目录做的任务:
task :link_shared_directories do
run "ln -s #{shared_path}/files #{release_path}/public/files"
end
after "deploy:update_code", :link_shared_directories
【解决方案2】:
您可以使文件成为您机器上另一个目录的符号链接,例如与 /current 和 /releases 处于同一级别的 /shared 目录。
查看 capistrano 管理 /log 和 /tmp 目录。
【解决方案3】:
现在我们可以在 deploy.rb 中简单地使用 :linked_files:
set :linked_files, %w{config/database.yml}
在这种情况下,文件 [target_dir]/shared/config/database.yml 必须存在于服务器上。