首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置没有凤凰的Plug.Static

如何配置没有凤凰的Plug.Static
EN

Stack Overflow用户
提问于 2015-09-12 20:13:04
回答 3查看 4.3K关注 0票数 11

我正在试图找出如何配置Plug.Static ,而不需要任何其他框架(菲尼克斯、糖等);只有牛仔、插件和药剂。我只是不知道怎么把东西放在路由器里。

代码语言:javascript
复制
  plug :match
  plug Plug.Static, at: "/pub", from: :cerber
  plug :dispatch

  get "/" do
    Logger.info "GET /"
    send_resp(conn, 200, "Hello world\n")
  end
  1. Plug.Static的声明在正确的地方吗?不是应该是在plug :dispatch之后吗?
  2. 我需要定义一个额外的路线吗?
  3. 使用以下声明:
    1. index.html说,要达到的网址是什么?
    2. 在文件系统中,index.html应该位于哪里?

我只是迷路了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-12 22:11:13

看看Plug.Router docs,了解:match:dispatch是如何工作的。:match将尝试找到一个匹配的路由,:dispatch将调用它。这意味着,只有在路由器中有匹配的路由时,才会调用安装程序中的Plug.Static,这是没有意义的。你想要plug Plug.Static先于一切。记住,插件只是按照声明的顺序调用的函数。

除此之外,您的Plug.Static设置似乎还可以。您的当前配置将服务于"/pub“中的资产,这意味着"/pub/index.html”将在您的应用程序中查找“priv/静态/index.html”。更多信息在这里:http://hexdocs.pm/plug/Plug.Static.html

票数 10
EN

Stack Overflow用户

发布于 2018-07-03 13:29:30

这就是我一直在寻找的答案。

在应用程序启动方法中,将Plug.Router与牛仔一起使用:

代码语言:javascript
复制
defmodule HttpServer.Application do
  require Logger
  use Application

  def start(_type, _args) do
    children = [
      {Plug.Adapters.Cowboy2, scheme: :http, plug: HttpServer.Router, options: [port: 4002]}
    ]

    opts = [strategy: :one_for_one, name: HttpServer.Supervisor]

    Supervisor.start_link(children, opts)
  end
end

路由器模块如下所示:

代码语言:javascript
复制
defmodule HttpServer.Router do
  use Plug.Router

  plug(Plug.Logger)
  plug(:redirect_index)
  plug(:match)
  plug(:dispatch)

  forward("/static", to: HttpServer.StaticResources)

  get "/sse" do
    # some other stuff...
    conn
  end

  match _ do
    send_resp(conn, 404, "not found")
  end

  def redirect_index(%Plug.Conn{path_info: path} = conn, _opts) do
    case path do
      [] ->
        %{conn | path_info: ["static", "index.html"]}

      ["favicon.ico"] ->
        %{conn | path_info: ["static", "favicon.ico"]}

      _ ->
        conn
    end
  end
end

在这里,对"/static“的请求被转发到HttpServer.StaticResources模块,但是首先,请求路径被修改为"/”和"/favicon.ico“,并带有插头(:redirect_index)。所有静态文件(*.html、*.ico、*.css、*.js等)放置在默认位置(project_dir/priv/静态)。

最后,StaticResource模块:

代码语言:javascript
复制
defmodule HttpServer.StaticResources do
  use Plug.Builder

  plug(
    Plug.Static,
    at: "/",
    from: :http_server
  )

  plug(:not_found)

  def not_found(conn, _) do
    send_resp(conn, 404, "static resource not found")
  end
end
票数 4
EN

Stack Overflow用户

发布于 2016-03-28 22:20:25

若泽·瓦利姆所说的一切。下面是一个最简单的例子:

代码语言:javascript
复制
defmodule Server do
  use Plug.Builder
  plug Plug.Logger
  plug Plug.Static, at: "/", from: "/path/to/static"
end

这将在"/“端点上为”/path/to/静态“中的所有静态文件提供服务。

查看文档以获得更多选项和更深入的解释。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32543265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档