Un petit contrôleur CGI pour Phoenix.
Ajoutez PhoenixCGI à vos deps dans mix.exs :
defp deps do
[
{ :phoenix_cgi , "~> 0.1" } ,
...
]
end Ensuite, et c'est vraiment important, dans votre endpoint.ex , ajoutez le body_reader suivant dans votre plug Plug.Parsers :
plug Plug.Parsers ,
body_reader: { PhoenixCGI.CacheRawBody , :read_body , [ ] } ,
...Cela entraînera l'enregistrement du corps de votre demande dans un domaine privé, afin que nous puissions le transmettre aux scripts CGI.
Vous pourrez alors utiliser PhoenixCGI comme n'importe quel contrôleur. Par exemple, si vous souhaitez servir git-http-backend sur A /git/ pour servir tous les référentiels dans /opt/git/repos/ , vous pouvez configurer comme suit:
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"
} Vous pouvez également définir une prise qui définira, par exemple, qui projette à servir, avec assign/3 .
defp set_repo ( conn ) do
assign ( conn , :extra_env , % {
GIT_PROJECT_ROOT: "/opt/git/repos/demo.git" ,
GIT_HTTP_EXPORT_ALL: "1"
} )
endEt puis utilisez-le
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 La documentation est disponible sur Hexdocs.
Copyright (C) 2020 David Baumgartner
Ce programme est un logiciel gratuit: vous pouvez le redistribuer et / ou le modifier en vertu des termes de la licence publique générale GNU publiée par la Free Software Foundation, soit la version 3 de la licence, ou (à votre option) n'importe quelle version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais sans aucune garantie; Sans même la garantie implicite de qualité marchande ou d'adéquation à un usage particulier. Voir la licence publique générale GNU pour plus de détails.
Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Sinon, voir http://www.gnu.org/licenses/.
J'accepte avec plaisir les demandes de traction via GitHub.