如何获取Phoenix应用程序的当前基本域?

Mej*_*eji 5 elixir phoenix-framework

为Phoenix/Elixir应用程序获取基本域的惯用方法是什么?不是单个请求,而是应用程序的基本域,可能取决于其当前环境.

所以本地应该是localhost,但在服务器上,它可以是"dev.my_domain.com","my_domain.com"或我可以在我的应用程序中使用的其他东西.

当然,我可以在一个config/dev.exs或中添加一个特殊的密钥config/prod.exs,但我认为可能已经有一个我可以重用的密钥.

She*_*yar 8

对于请求,您应该使用类似@TheAnhLe建议的host字段Plug.Conn.

但是如果你想要获得域名,那么Phoenix允许你url在应用程序Endpoint配置中指定参数:

# config/prod.exs

config :my_app, MyAppWeb.Endpoint,
  http: [port: {:system, "PORT"}],
  url: [host: "example.com", port: 80],
  # more configs...
Run Code Online (Sandbox Code Playgroud)

您可以使用这些方法来获取主机的值:

MyAppWeb.Endpoint.url
# => "http://localhost:4000"

Application.get_env(:my_app, MyAppWeb.Endpoint)[:url][:host]
# => "localhost"
Run Code Online (Sandbox Code Playgroud)

localhost未指定时,此值默认为.


The*_*Anh 5

您正在寻找。host这是存储在Plug.Connstruct中的request字段。

host-以二进制形式请求的主机,例如:“ www.example.com”

请求字段


小智 5

使用phoenix 1.3.0(不了解旧版本),您可以url/0Endpoint API调用

例如:

iex(1)> TestWeb.Endpoint.url
"http://localhost:4000"
Run Code Online (Sandbox Code Playgroud)