如何在Phoenix中动态生成和提供sitemap.xml?

时间:2017-09-29 03:22:15

标签: elixir phoenix-framework

我有一个带有sitemap.xml的应用程序。我需要每天动态修改一次。我知道如何为它生成内容。但是,我怎样才能用新生成的内容替换(!)我当前的sitempa.xml,或者更确切地说是其内容? 如果它是一个rails应用程序,我只是替换它的内容并且它可以工作,但对于凤凰它是不同的。

我提供的sitemap.xml代码是标准代码:

defmodule MyApp.Endpoint do
  # ................

  # Serve at "/" the static files from "priv/static" directory.
  #
  # You should set gzip to true if you are running phoenix.digest
  # when deploying your static files in production.
  plug Plug.Static,
    at: "/", from: :my_app, gzip: false,
    only: ~w(css fonts images js favicon.ico robots.txt sitemap.xml)

我应该为" sitemap.xml"创建一个特殊的路由/操作。并在控制器中提供服务?

1 个答案:

答案 0 :(得分:3)

我从控制器/操作中提供它并将值缓存在内存中24小时。

# Router
get "/sitemap.xml", SitemapController, :index

# Controller
defmodule MyApp.SitemapController do
  use MyApp.Web, :controller

  def index(conn, _params) do
    xml = ... # generate the sitemap / fetch from cache
    conn
    |> put_resp_header("content-type", "application/xml")
    |> send_resp(200, xml)
  end
end

要缓存xml的值,您可以直接使用代理或ETS表执行此操作,也可以使用cachexcon_cache等库。