2016-02-18 41 views
0

我有一个rails应用程序,我使用Capistrano作为部署宝石。如何设置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, '[email protected]' 

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

回答

1

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

  1. 检查是否真的需要共享public/assets。不分享它们的缺点是,当您使用更改的资产部署新版本的应用程序时,旧资产会消失。对于面向公众的应用程序,这可能是一个问题。如果它是内部应用程序,或者在缓存旧文件前有Akamai/Cloudflare样式的CDN,则可能不是。
  2. 将非自动生成的资产移动到其他文件夹,可能是public/static_assets。那些也将是可访问的。
  3. 另一面是move the Sprockets managed assets to a different folder
  4. 弄清楚如何使链轮实际上管理这段代码,因此所有结果都在public/assets

有可能还有其他方法,但希望这可以提供一个解决方案或给你一个起点从哪里去。

+0

我认为最简单的选择是不共享资产,谢谢! –

相关问题