我有一个Rails应用程序,并且我使用Capistrano作为部署工具。
我的deploy.rb文件具有以下内容:
set :application, 'appname'
set :repo_url, '[email protected]: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文件夹中,有许多子目录是应用程序运行所必需的。 将'public / assets'放在linked_dirs选项中只会符号链接该特定文件夹,然后手动将所有子目录写入其中似乎是一个糟糕的解决方案。 我如何告诉Capistrano在部署中的文件夹中包含所有内容(甚至子目录)?
好问题。 我看到了几种解决核心问题的方法,即必须定义每个特定的文件夹。
public/assets
。 不共享它们的缺点是,当您使用更改的资产部署新版本的应用程序时,旧资产将消失。 对于面向公众的应用程序,这可能是个问题。 如果它是一个内部应用程序,或者前面有一个Akamai / Cloudflare样式CDN来缓存旧文件,则可能不是。 public/static_assets
。 这些也将可访问。 public/assets
。 可能还有其他方法,但是希望这可以提供解决方案或为您提供一个起点。