์ก์ธ์ค ๋ก๊ทธ ํ์ํ/์ ์ด๋ฅผ ์ํด mruby ํธ๋ค๋ฌ๋ฅผ ์์ฑํ์ต๋๋ค.
ํ์ง๋ง h2o conf์ ๋ชจ๋ ๊ฒฝ๋ก์ mruby-handler-file ์ง์๋ฌธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋ก๊ทธ ์ง์๋ฌธ์ ์ก์ธ์คํ๊ธฐ ์ํด ํธ๋ค๋ฌ๋ฅผ ์ถ๊ฐํ๊ณ ํด๋น ๋ฒ์ ๋ด์์ ๋ชจ๋ ์์ฒญ/์๋ต์ ์ ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก:
์๋
ํ์ธ์ @Jxck
์ธ๊ธํ ๋๋ถ๋ถ์ ์์
์ ์ด๋ฏธ ์ํํ ์ ์์ง๋ง ๋ฌธ์ํ๊ฐ ์ฝ๊ฐ ๋ถ์กฑํ ์ ์์ต๋๋ค.
๋ก๊ทธ ํ์ผ ํ์ ์ ํ์ดํ๋ฅผ ํตํด ์ํํด์ผ ํฉ๋๋ค. ์ต๊ทผ์ ์ฌ๊ธฐ์์ ๋ฌธ์๋ฅผ ์ฝ๊ฐ ๊ฐ์ ํ๋ ค๊ณ ํ์ต๋๋ค.
https://github.com/h2o/h2o/pull/1528
json์ ํตํ ๋ก๊ทธ ํ์ํ๋ ์ด๋ฏธ escape: json
๋ฅผ ํตํด ์ํํ ์ ์์ต๋๋ค.
ํ์คํ ๋ชจ๋ ํค๋๋ฅผ ๋ก๊น ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ผ ํ์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. iirc ํ ๋ฒ ํฐ์ผ์ ์ด์์ง๋ง ์ง๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. ํ์ฌ ๋๋ mruby์์์ด ํดํน์ ์ํํฉ๋๋ค.
headers = JSON.dump(env.find_all{|k,v| k.start_with?("HTTP_")})
[200, { "x-fallthru-set-MRB_HEADERS" => headers }, [result]]
๊ทธ๋ฐ ๋ค์ ๋ค์์ ํตํด ๋ก๊ทธ์ธํ์ญ์์ค.
access-log:
path: /dev/stdout
format: '{ "requestHeaders": %{MRB_HEADERS}e }'
escape: json
๋๋ ๋จ์ง ๋ก๊ทธ๋ฅผ ์กฐ์ํ๊ธฐ ์ํด ๋ชจ๋ ํธ์ถ์ ๋ํด mruby ์ฝ๋๋ฅผ ํธ์ถํ๋ค๋ ๋น์ ์ ์๊ฐ์ด ๋ง์ด ๋๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋๋ฌด ๋น์ ๊ฒ์ ๋๋ค.
๋ด ๋ฌธ์ ์ ํต์ฌ์ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ ๊ฒฝ๋ก์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
๋ด๊ฐ ์ด ๊ฒ์ฒ๋ผ
ํ์ง๋ง h2o conf์ ๋ชจ๋ ๊ฒฝ๋ก์ mruby-handler-file ์ง์๋ฌธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ
๋๋ฌด ๋น์ ๊ฒ์ ๋๋ค.
๊ทธ๊ฒ์ ์ ์ค ์ผ์ด์ค์ ๋ฌ๋ ค ์์ต๋๋ค.
access-log๋ฅผ ํ์ฑํํ๋ฉด ๋ก๊ฑฐ๊ฐ ์ด๋ฏธ ์๋ฒ์ ๋ํ req/res์ ์ ์ฉ๋ฉ๋๋ค.
@Jxck ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ๋์๊ฒ ๋ช ํํ์ง ์์ต๋๋ค.
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ณ ๋ ๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์๋ค๊ณ ์๊ฐํ๋ ์ํ ๊ตฌ์ฑ์ ๋ง๋ค ์ ์์ต๋๊น?
@Jxck ์ ์ด์ผ๊ธฐํ๊ณ ๋ชจ๋ ์์ฒญ ํค๋( \n
์ ์ฐ๊ฒฐ ๊ฐ๋ฅ) ๋๋ ์๋ต ํค๋๋ฅผ ๊ธฐ๋กํ ์ ์๋๋ก ํ๋ ๋ก๊น
์ง์๋ฌธ์ ๊ฐ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๋ ๋ฐ ๋์ํ์ต๋๋ค.
@kazuho ๊ทธ๋ค์ ๋ชจ์ต์ด ๊ธฐ๋๋ฉ๋๋ค!
@kazuho
๊ฐ์ฒด ๋๋ ๋ฐฐ์ด ๋ฐฐ์ด๋ก json ๋ชจ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ข์ ๊ฒ์
๋๋ค.
๋๋ ๋ํ ํ์ฌ mruby๋ฅผ ํตํด ๊ธฐ๋กํ๊ณ ์์ง๋ง ์๋ ํ์์ด ์๋๊ธฐ ๋๋ฌธ์ ์ถ์
ํฉ๋๋ค.
์ด๋ค ์ ๋ฐ์ดํธ?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@Jxck ์ ์ด์ผ๊ธฐํ๊ณ ๋ชจ๋ ์์ฒญ ํค๋(
\n
์ ์ฐ๊ฒฐ ๊ฐ๋ฅ) ๋๋ ์๋ต ํค๋๋ฅผ ๊ธฐ๋กํ ์ ์๋๋ก ํ๋ ๋ก๊น ์ง์๋ฌธ์ ๊ฐ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๋ ๋ฐ ๋์ํ์ต๋๋ค.