使用单独的代码库在应用程序之间共享模板的好方法是什么?

时间:2013-11-25 18:47:20

标签: ruby git backbone.js heroku amazon-s3

我们有一个Sinatra应用程序和一个Backbone应用程序。

我看到了Sharing the same codebase across multiple apps,但我不理解它或如何实现它。

这个问题并非真正针对Sinatra或Backbone;它几乎可以是任何应用程序。使用Heroku和Git

一个想法是将HTML放在S3上,但我们没有使用S3来存储HTML。你如何从Git进入S3?这看起来很复杂。

那么,是否有一种在应用程序之间共享HTML模板的好方法?

1 个答案:

答案 0 :(得分:2)

我们通过拥有一个包含父目录,定义良好的公共文件路径,并使用一个通用的YAML文件来告诉不同的应用程序在哪里查看。

创建一个包含Hash的公共YAML文件,其中的键是特定资源或资源路径的公用名,值是磁盘上的绝对路径。

例如:

---
html: /absolute/path/to/shared/html
images:  /absolute/path/to/shared/images
main_css:  /absolute/path/to/shared/styles.css

使用Ruby加载:

require 'yaml'

SHARED_RESOURCES = YAML.load_file('/absolute/path/to/shared_resources.yaml')
# => {"html"=>"/absolute/path/to/shared/html", "images"=>"/absolute/path/to/shared/images", "main_css"=>"/absolute/path/to/shared/styles.css"}

使用生成的SHARED_RESOURCES哈希来检索所需的信息:

main_css = SHARED_RESOURCES['main_css'] 
# => "/absolute/path/to/shared/styles.css"

您可以使用 ANY 语言中可以读取YAML的相同YAML文件,也可以打开该文件并解析其内容。此时,所有代码库都可以播放同一张音乐,并且知道如何在必要时访问公共文件。

例如,来自Perl:

use YAML;

$SHARED_RESOURCES = Load('
---
html: /absolute/path/to/shared/html
images:  /absolute/path/to/shared/images
main_css:  /absolute/path/to/shared/styles.css
');

print $SHARED_RESOURCES->{'main_css'}, "\n";
>> /absolute/path/to/shared/styles.css

如果您想获得更好的感觉,请使用数据库来保存这些共享资源。无论哪种方式,想法都是代码只有一个地方可以查找特定的资源/文件。