[英]Serving assets in development vs production
生产模式下的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中有哪些替代方法可以实现此目的?
Fingerpriting
您指的是资产指纹识别
这是Rails确定生产中资产的唯一URL的一种方式,使您可以使用precompilation
方式为资产提供静态服务,因此更快
如Rails文档中所述:
指纹识别是一种使文件名取决于文件内容的技术。 文件内容更改时,文件名也更改。 对于静态或不经常更改的内容,这提供了一种简单的方法来判断文件的两个版本是否相同,即使在不同的服务器或部署日期之间也是如此。
-
路径助手
您遇到的问题是,在开发中使用Rails时,它将从app/assets
目录提供app/assets
。 但是,当您将应用程序投入生产时,该应用程序将代替public
目录中的资产
这是一个问题,因为这意味着您必须执行一些条件路径加载才能使该功能正常运行。 解决方法是使用资产路径助手
这些仅适用于.erb
预处理程序,使您可以调用以下代码:
asset_url("your_asset_url")
这将独立于您处于生产还是开发模式来加载资产路径。
的NodeJS
也许您可以通过了解Rails中asset_url
路径帮助器的源代码来获得更好的见解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.