如何使用Ruby和Puma检测由其他请求生成的请求?



让我解释一下我需要什么。

当我在我的HTML页面中包含像Bootstrap这样的库时,这个页面被加载,库主文件也被加载。大多数情况下,库文件需要其他文件。由于我使用Bootstrap作为示例,让我们考虑glyphicons-halflings-regular.svg, glyphicons-halflings-regular.ttf, glyphicons-halflings-regular.woffglyphicons-halflings-regular.woff2,它们都是Bootstrap的一部分。

我正在编写一个Rack中间件来处理来自我的应用程序的请求。此中间件的任务之一是根据某些约定修改请求。例如,在我的应用程序中,Bootstrap将位于以下路径
ENV['HOME']/my_app/web/libraries/bootstrap/

和它的主CSS文件将是

ENV['HOME']/my_app/web/libraries/bootstrap/css/bootstrap.css

并且,当加载时,它会为我上面提到的所有这些文件生成新的请求。

我需要的是确定某个文件,比如glyphicons-halflings-regular.svg,是另一个文件所需要的,所以我可以使用我的Rack中间件来相应地更改其位置。如:

Requested file:
    `glyphicons-halflings-regular.svg`
Requested-by:
    http://my_app_domain.com/web/libraries/bootstrap/css/bootstrap.css
Request address:
    http://my_domain_app.com/web/libraries/bootstrap/css/../fonts/glyphicons-halflings-regular.svg

我考虑为每个新请求启动一个线程。然后,我只需要考虑主文件的地址作为基地址,并将其添加到该文件生成的每个子请求中。

我很想听听你对这件事的看法。有什么更好的方法吗?

编辑:(spickermann的问题)

不,这不是重点。也许我没有说清楚,那我就换个说法吧。

考虑以下结构:

ENV['HOME']/my_app/web/libraries/library1/
                                |        |
                                |        |_ a_css_file.css
                                |        |_ a_jpeg_file.jpg
                                |
                                /library2/
                                         |
                                         |_ another_css_file.css
                                         |_ a_jpeg_file.jpg

让我们假设我的中间件接收到一个名为a_jpeg_file.jpg的文件请求。我们有两个同名的文件,一个在library1,另一个在library2

我决定要服务哪个文件的唯一方法是,如果我知道a_css_file.cssanother_css_file.css是否需要a_jpeg_file.jpg

在第一种情况下,我将library1的路径附加到文件并提供ENV['HOME']/my_app/web/libraries/library1/。在另一种情况下,我将路径添加到library2并提供ENV['HOME']/my_app/web/libraries/library2/

在这两种情况下,我都需要知道哪个文件生成了a_jpeg_file.jpg的请求。

换句话说,我需要知道哪个库上下文需要某个文件。

也许您可以参数化您的资源like my-image.jpg?dir='dir1'并解析中间件上的参数。Rails也采用了类似的方法来缓存资产。此外,您可以使用一些加密和解密参数中的信息的crypt函数,如image.jpt?info=HughYF65fFj7t...,然后您在中间件中解密信息并使用您发送的信息。

相关内容

  • 没有找到相关文章

最新更新