使用 ring/compojure 提供静态文件 - 来自战争

Posted

技术标签:

【中文标题】使用 ring/compojure 提供静态文件 - 来自战争【英文标题】:Serving static files with ring/compojure - from a war 【发布时间】:2011-12-10 14:46:19 【问题描述】:

使用 ring(和 lein-ring 工具) - 在开发中运行时,我可以根据文档从“资源”等中提供静态文件 - 但是 - 当我通过 Lien uberwar 打包东西时,我不知道如何使它在容器中运行时为这些文件提供服务。我在 wrap-resource 或设置 :resource-path 上看到有冲突的文档,但似乎没有任何效果。

【问题讨论】:

对于 Google App Engine,我只能将静态文件直接放在 war/ 目录中。模板文件(我使用 soy)实际上保留在 resource/ 目录中,并以某种方式编译到 war 目录中。我想这是不可能的/在你的情况下不起作用? 【参考方案1】:

根据 Compojure 的 Getting Started Wiki,将 route/resources 放在您的路径下方:

(defroutes main-routes
  (GET "/" [] "<h1>Hello World Wide Web!</h1>")
  (route/resources "/")
  (route/not-found "Page not found"))

...然后,在您的项目中创建一个文件夹resources/public,将您的静态文件放在那里。在引用这些文件时,/resources/public 是隐含的,因此您可以编写如下内容:(include-css "/css/site.css")

这里是an example that deploys to cloudbees。

【讨论】:

应该是resources/public 而不是resrouce/public 对不起迈克尔,我不会拼写!我想说resources 目录应该是复数形式,我想。【参考方案2】:

compojure.route/resources 应该做你想做的事。

只需将文件放入resources/public,然后在路线列表末尾附近添加路线(resources "/")

您需要一个相当新的 lein-ring 才能正常工作;旧版本的 lein-ring 不支持公共资产的资源目录。

【讨论】:

以上是关于使用 ring/compojure 提供静态文件 - 来自战争的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ring 测试会话状态?

使用 Fossil SCM 提供静态文件

使用 ASP.NET 路由来提供静态文件

更好的方法是啥:使用 Express 或 nginx 提供静态文件?

配置 STATIC_ROOT 时 Django 不提供静态文件

django 1.6 使用别名和 apache 提供静态管理文件