Pengontrol CGI kecil untuk Phoenix.
Tambahkan PhoenixCGI ke deps Anda di mix.exs :
defp deps do
[
{ :phoenix_cgi , "~> 0.1" } ,
...
]
end Kemudian, dan itu sangat penting, di endpoint.ex Anda, tambahkan body_reader berikut di plug Plug.Parsers Anda:
plug Plug.Parsers ,
body_reader: { PhoenixCGI.CacheRawBody , :read_body , [ ] } ,
...Ini akan menyebabkan tubuh permintaan Anda disimpan di bidang pribadi, sehingga kami akan dapat meneruskannya ke skrip CGI.
Anda kemudian akan dapat menggunakan PhoenixCGI sebagai pengontrol mana pun. Misalnya, jika Anda ingin melayani git-http-backend pada A /git/ untuk melayani semua repositori di /opt/git/repos/ , Anda dapat mengatur sebagai berikut:
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"
} Anda juga dapat menentukan steker yang akan menentukan, misalnya, proyek mana yang akan dilayani, dengan assign/3 .
defp set_repo ( conn ) do
assign ( conn , :extra_env , % {
GIT_PROJECT_ROOT: "/opt/git/repos/demo.git" ,
GIT_HTTP_EXPORT_ALL: "1"
} )
endDan kemudian gunakan
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 Dokumentasi tersedia di hexdocs.
Hak Cipta (C) 2020 David Baumgartner
Program ini adalah perangkat lunak gratis: Anda dapat mendistribusikannya kembali dan/atau memodifikasinya di bawah ketentuan Lisensi Publik Umum GNU seperti yang diterbitkan oleh Yayasan Perangkat Lunak Gratis, baik versi 3 dari lisensi, atau (pada opsi Anda) versi selanjutnya.
Program ini didistribusikan dengan harapan akan bermanfaat, tetapi tanpa jaminan apa pun; bahkan tanpa jaminan tersirat dari dapat diperjualbelikan atau kebugaran untuk tujuan tertentu. Lihat Lisensi Publik Umum GNU untuk lebih jelasnya.
Anda seharusnya menerima salinan Lisensi Publik Umum GNU bersama dengan program ini. Jika tidak, lihat http://www.gnu.org/licenses/.
Saya dengan senang hati menerima permintaan tarik melalui GitHub.