2016-04-25 5 views
2

Ich versuche, ein JSON-Backend für Elm zu bauen. Ich möchte nur eine Seite bedienen - elm.html, eine js-Datei - Main.js - und eine CSS-Datei.Statische HTML-Seite in Phoenix

Ich versuchte following these instructions, aber es gibt nicht genug dort, um einem kompletten Neuling wie mir zu helfen.

So, jetzt habe ich router.ex

scope "/", JwtExample do 
    pipe_through :browser # Use the default browser stack 

    get "/elm", RootController, :index 
    get "/", PageController, :index 
    end 


    # Other scopes may use custom stacks. 
    scope "/api", JwtExample do 
    pipe_through :api 

    resources "/users", UserController, except: [:new, :edit] 
    end 

Dieser Controller

defmodule JwtExample.RootController do 
    use JwtExample.Web, :controller 

    plug :action 

    def index(conn, _params) do 
    redirect conn, to: "/elm.html" 
    end 
end 

Und meine Dateien in web/static und priv/static

Aber wenn ich zu/Ulme surfen ich

keine Route für GET /elm.html (JwtExample.Router)

+0

Siehe: http://StackOverflow.com/Questions/35100117/How-to-serve-static-page-in-phoenix-framework – psantos

Antwort

0

OK, so basierend auf psantos gefunden beantworten, ich lib/endpoint.ex ändern musste

plug Plug.Static, 
    at: "/", from: :jwt_example, gzip: false, 
    only: ~w(css fonts images js favicon.ico robots.txt elm.html) 
1

Hier ist eine Lösung lesen das auch die statische Seite für Anforderungen an die Root-URL verwaltet, d. e. https://myapp.test/:

Hier ist eine Lösung, die eine Anfrage an den Root-Pfad zu index.html mit einem kurzen Funktionsstecker abbildet, der zu Ihrem endpoint.ex ohne Einbeziehung von Controllern hinzugefügt werden kann. Es funktioniert, indem eine kurze Plug-Funktion definiert wird, um den angeforderten Pfad zu ändern. Meine Hoffnung ist, dass es im Endpunkt etwas schneller ist, als wenn man es in einem Controller macht.

Beachten Sie, dass Sie in der Produktion in der Regel mit statischen Assets auf der Anwendungsserverebene arbeiten und Phoenix möglicherweise überhaupt nicht erreichen.