如何在Capistrano中设置子目录?

问题描述 投票:0回答:1

我有一个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在部署中的文件夹中包含所有内容(甚至子目录)?

ruby-on-rails ruby capistrano capistrano3
1个回答
1
投票

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

  1. 检查是否确实需要共享public/assets 不共享它们的缺点是,当您使用更改的资产部署新版本的应用程序时,旧资产将消失。 对于面向公众的应用程序,这可能是个问题。 如果它是一个内部应用程序,或者前面有一个Akamai / Cloudflare样式CDN来缓存旧文件,则可能不是。
  2. 将非自动生成的资产移动到其他文件夹,可能是public/static_assets 这些也将可访问。
  3. 另一面是将Sprockets托管资产移动到其他文件夹
  4. 弄清楚如何使Sprockets实际管理此代码,以便最终将它们变成public/assets

可能还有其他方法,但是希望这可以提供解决方案或为您提供一个起点。

© www.soinside.com 2019 - 2024. All rights reserved.