生产模式下的Rails提供public/assets
文件夹中的资源,如下所示:
/assets/application-c3967f04f81628153a30120e3f5b8695.js
并且在开发模式下从app/assets
这样的文件夹提供
/assets/application.js?body=1
或
/assets/application-c3967f04f81628153a30120e3f5b8695.js
我想知道rails是如何解决这个问题的。因为我试图在nodejs中做同样的事情,我认为一种方法可能是这样的:
var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
app.use(express.static(path.join(config.root, 'app')));
} else if ('production' == env) {
app.use(express.static(path.join(config.root, 'public')));
};
在NodeJS中实现这一目标有哪些替代方案?
答案 0 :(得分:0)
<强> Fingerpriting 强>
您所指的是 asset fingerprinting
这是Rails确定生产中资产的唯一网址的一种方式,允许您使用precompilation
之类的内容为您的资产提供静态服务,从而更快地
如Rails文档中所述:
指纹识别是一种使文件名依赖的技术 关于文件的内容。当文件内容改变时, 文件名也被更改。对于静态或不经常的内容 改变了,这提供了一个简单的方法来判断是否有两个版本 文件是相同的,即使在不同的服务器或部署日期也是如此。
-
路径助手
您遇到的问题是在开发中使用Rails时,它将从app/assets
目录中提供资源。但是,当您将应用程序投入生产时,应用程序将提供public
目录中的资产,而不是
这是一个问题,因为这意味着你必须做一些条件路径加载才能让事情发挥作用。解决这个问题的方法是使用asset path helpers
这些只适用于.erb
之类的预处理程序,允许您调用以下内容:
asset_url("your_asset_url")
这将加载资产路径,无论您是处于生产模式还是开发模式。
<强>的NodeJS 强>
也许您可以通过查看Rails中的source for asset_url
path helper来获得更好的洞察力