Ein kleiner CGI -Controller für Phoenix.
Fügen Sie Ihren deps in mix.exs PhoenixCGI hinzu:
defp deps do
[
{ :phoenix_cgi , "~> 0.1" } ,
...
]
end Dann fügen Sie in Ihrem endpoint.ex die folgende body_reader in Ihren plug Plug.Parsers hinzu.
plug Plug.Parsers ,
body_reader: { PhoenixCGI.CacheRawBody , :read_body , [ ] } ,
...Dies führt dazu, dass der Körper Ihrer Anfrage in einem privaten Bereich gespeichert wird, damit wir ihn an die CGI -Skripte weitergeben können.
Sie können dann PhoenixCGI wie jeder Controller verwenden. Wenn Sie beispielsweise git-http-backend auf A /git/ allen Repositories in /opt/git/repos/ servieren möchten, können Sie wie folgt einrichten:
match :* , "/git/*path" , PhoenixCGI ,
binary: "/usr/lib/git-core/git-http-backend" ,
extra_env: % {
GIT_PROJECT_ROOT: "/opt/git/repos/" ,
GIT_HTTP_EXPORT_ALL: "1"
} Sie können auch einen Stecker definieren, der beispielsweise definiert wird, welches Projekt mit assign/3 projiziert werden soll.
defp set_repo ( conn ) do
assign ( conn , :extra_env , % {
GIT_PROJECT_ROOT: "/opt/git/repos/demo.git" ,
GIT_HTTP_EXPORT_ALL: "1"
} )
endUnd dann benutze es
pipeline :git do
plug :set_repo
end
scope "/" do
pipe_through :git
match :* , "/git/*path" , PhoenixCGI ,
binary: "/usr/lib/git-core/git-http-backend"
end Die Dokumentation ist auf Hexdocs verfügbar.
Copyright (C) 2020 David Baumgartner
Dieses Programm ist kostenlose Software: Sie können es neu verteilt und/oder unter den Bestimmungen der GNU General Public Lizenz wie von der Free Software Foundation, entweder Version 3 der Lizenz veröffentlicht, oder (nach Ihrer Option) jede spätere Version ändern.
Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, jedoch ohne Garantie; Ohne die implizite Garantie für Handelsfähigkeit oder Eignung für einen bestimmten Zweck. Weitere Informationen finden Sie in der GNU General Public Lizenz.
Sie hätten zusammen mit diesem Programm eine Kopie der GNU General Public Lizenz erhalten haben. Wenn nicht, siehe http://www.gnu.org/licenses/.
Ich akzeptiere gerne Pull -Anfragen durch Github.