如何在 Capistrano 中设置子目录?
How to set subdirectories in Capistrano?
我有一个 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 文件夹中,因为我使用了很多模板代码。在 public/assets 文件夹中有很多 子目录 是应用程序 运行 所必需的。将 'public/assets' 放在 linked_dirs 选项中只会符号链接该特定文件夹,并手动将所有子目录写入其中似乎是一个糟糕的解决方案。我如何告诉 Capistrano 将所有内容(甚至子目录)包含在部署的文件夹中?
好问题。我看到了几种可能性,所有方法都可以解决您必须定义每个特定文件夹的核心问题。
- 检查您是否真的需要
public/assets
共享。不共享它们的缺点是,当您部署具有更改资产的应用程序的新版本时,旧资产就会消失。对于面向 public 的应用程序,这可能是个问题。如果它是一个内部应用程序,或者如果它前面有一个 Akamai/Cloudflare 风格的 CDN 缓存旧文件,它可能不是。
- 将非自动生成的资产移动到不同的文件夹,也许
public/static_assets
。这些也将是可访问的。
- 反面是move the Sprockets managed assets to a different folder。
- 弄清楚如何让 Sprockets 实际管理这段代码,所以它最终都在
public/assets
。
可能还有其他方法,但希望这可以提供解决方案或为您提供一个起点。
我有一个 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 文件夹中,因为我使用了很多模板代码。在 public/assets 文件夹中有很多 子目录 是应用程序 运行 所必需的。将 'public/assets' 放在 linked_dirs 选项中只会符号链接该特定文件夹,并手动将所有子目录写入其中似乎是一个糟糕的解决方案。我如何告诉 Capistrano 将所有内容(甚至子目录)包含在部署的文件夹中?
好问题。我看到了几种可能性,所有方法都可以解决您必须定义每个特定文件夹的核心问题。
- 检查您是否真的需要
public/assets
共享。不共享它们的缺点是,当您部署具有更改资产的应用程序的新版本时,旧资产就会消失。对于面向 public 的应用程序,这可能是个问题。如果它是一个内部应用程序,或者如果它前面有一个 Akamai/Cloudflare 风格的 CDN 缓存旧文件,它可能不是。 - 将非自动生成的资产移动到不同的文件夹,也许
public/static_assets
。这些也将是可访问的。 - 反面是move the Sprockets managed assets to a different folder。
- 弄清楚如何让 Sprockets 实际管理这段代码,所以它最终都在
public/assets
。
可能还有其他方法,但希望这可以提供解决方案或为您提供一个起点。