使用 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 提供静态文件 - 来自战争的主要内容,如果未能解决你的问题,请参考以下文章
更好的方法是啥:使用 Express 或 nginx 提供静态文件?