繁体   English   中英

服务开发与生产中的资产

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM