如何在Capistrano中设置子目录?

时间:2016-02-18 22:36:56

标签: ruby-on-rails ruby capistrano capistrano3

我有一个rails应用程序,我使用Capistrano作为部署gem。

我的deploy.rb文件包含:

set :application, 'appname'
set :repo_url, 'git@bitbucket.org:someone/some_app.git'
set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml', 'secrets.json')
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads', 'public/assets/')
set :rvm_ruby_version, '2.2.2@deploy'

问题是我的所有资产都不在app文件夹中,有些是在公共文件夹中,因为我使用了很多模板代码。在public / assets文件夹中,应用程序运行需要很多子目录。放置公共/资产'在linked_dirs选项中只对特定文件夹进行符号链接,并手动编写其中的所有子目录似乎是一个可怕的解决方案。我如何告诉Capistrano将所有内容(甚至是子目录)包含在部署文件夹中?

1 个答案:

答案 0 :(得分:1)

好问题。我看到了几种可能性,所有解决核心问题的方法都必须定义每个特定的文件夹。

  1. 检查您是否真的需要共享public/assets。不共享它们的缺点是,当您使用更改的资产部署新版本的应用程序时,旧资产将消失。对于面向公众的应用程序,这可能是一个问题。如果它是一个内部应用程序,或者如果你有一个Akamai / Cloudflare风格的CDN在它前面缓存旧文件,它可能不是。
  2. 将非自动生成的资源移动到其他文件夹,可能是public/static_assets。这些也将是可访问的。
  3. 反面是move the Sprockets managed assets to a different folder
  4. 了解如何让Sprockets实际管理此代码,以便最终完成public/assets
  5. 可能还有其他方法,但希望这可以提供解决方案或为您提供一个起点。