5

Wie leitet man in Phoenix Framework einen benutzerdefinierten Medientyp in Accepts?Phoenix Framework: Wie man den benutzerdefinierten Medientyp routet?

Phoenix's own code comments geben Sie an, das folgende ist alles, was notwendig ist-plus eine Neukompilierung von Deps, obwohl die Notwendigkeit dafür entgeht mir. Aber dies scheint nicht zu funktionieren:

config.exs:

[…] 

config :plug, :mimes, %{ 
    "application/vnd.api+json" => ["json-api"] 
} 

router.ex:

pipeline :api do 
    plug :accepts, ["json-api"] 
end 

[…] 

scope "/", SomeApp do 
    pipe_through :api 

    […] 

some_test.ex:

setup do 
    conn = conn() |> put_req_header("accept", "application/vnd.api+json") 
    {:ok, conn: conn} 
end 

Alle Anfragen Tests (mit conn von Setup) erhalten HTTP 406 Antworten.

+0

Sie ordnen "" api-json "' in Ihrer Konfiguration zu, aber Sie übergeben '" json-api "' an Ihren Accept-Plug. Tippfehler in der Frage oder Tippfehler in Ihrem Code? Das scheint der wahrscheinlichste Täter zu sein –

+0

@ChrisMcCord Danke, dass ich darauf hingewiesen habe, nur ein Tippfehler in der Frage, fürchte ich, d. H. Der Code, den ich getestet habe, hat dieses Problem nicht und funktioniert immer noch nicht. Die Frage wurde korrigiert. –

+1

Können Sie angeben, "scheint nicht zu funktionieren?". Was funktioniert nicht? Was hast du erwartet und was bekommst du? Stellen Sie außerdem sicher, dass Ihre Abhängigkeit neu kompiliert wurde, im Zweifelsfall 'rm -rf _build'. –

Antwort

7

Es stellte sich heraus, dass die folgende unzureichend:

% touch deps/plug/mix.exs 
% mix deps.compile plug 
% mix clean 

Stattdessen wie @ josé-Valim in den Bemerkungen der Frage schon sagt, das Löschen der gesamten _build Verzeichnis der Trick. Ich bin ein paar Mal hin und her gegangen, um sicher zu sein, und jedes Mal, wenn ich mich nur berührte und berührte, keine Freude, und jedes Mal, wenn ich _build, Freude entfernte.

+0

Danke. Ich habe lange Zeit versucht, herauszufinden, wie man Tests mit ja_serializer durchführt. –