Небольшой контроллер CGI для Феникса.
Добавьте PhoenixCGI в ваши deps в mix.exs :
defp deps do
[
{ :phoenix_cgi , "~> 0.1" } ,
...
]
end Затем, и это очень важно, body_reader вашей endpoint.ex plug Plug.Parsers
plug Plug.Parsers ,
body_reader: { PhoenixCGI.CacheRawBody , :read_body , [ ] } ,
...Это приведет к сохранению тела вашего запроса в частном поле, чтобы мы смогли передать его сценариям CGI.
Затем вы сможете использовать PhoenixCGI в качестве любого контроллера. Например, если вы хотите подавать git-http-backend на /git/ для обслуживания всех репозиториев в /opt/git/repos/ , вы можете настроить следующее:
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"
} Вы также можете определить пробку, которая будет определять, например, какой проект для обслуживания, с assign/3 .
defp set_repo ( conn ) do
assign ( conn , :extra_env , % {
GIT_PROJECT_ROOT: "/opt/git/repos/demo.git" ,
GIT_HTTP_EXPORT_ALL: "1"
} )
endа затем используйте его
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 Документация доступна на Hexdocs.
Copyright (C) 2020 Дэвид Баумгартнер
Эта программа является бесплатным программным обеспечением: вы можете перераспределить его и/или изменить ее в соответствии с условиями общей публичной лицензии GNU, опубликованных Фондом Free Software, либо версией 3 лицензии, либо (по варианту) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезна, но без каких -либо гарантий; даже без подразумеваемой гарантии торговой точки зрения или пригодности для определенной цели. Смотрите общую публичную лицензию GNU для получения более подробной информации.
Вы должны были получить копию общей публичной лицензии GNU вместе с этой программой. Если нет, см. Http://www.gnu.org/licenses/.
Я с радостью принимаю запросы на тягу через GitHub.