{"id":213,"date":"2015-10-04T12:08:37","date_gmt":"2015-10-04T03:08:37","guid":{"rendered":"http:\/\/boltech21.net\/blog\/vottie\/?p=213"},"modified":"2015-10-05T01:51:13","modified_gmt":"2015-10-04T16:51:13","slug":"setting-gunicorn","status":"publish","type":"post","link":"https:\/\/boltech21.net\/blog\/vottie\/?p=213","title":{"rendered":"gunicorn\u306e\u8a2d\u5b9a"},"content":{"rendered":"<p>django\u3067\u4f55\u304b\u4f5c\u3063\u3066\u904b\u7528\u3059\u308b\u305f\u3081\u306e\u6e96\u5099\u3068\u3057\u3066gunicorn\u3092\u4f7f\u3063\u3066\u307f\u305f\u3002<\/p>\n<p><a href=\"http:\/\/gunicorn.org\/\" target=\"_blank\">gunicorn<\/a><\/p>\n<p>\u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u306b\u306f\u7c21\u5358\u306b\u52d5\u304d\u307e\u3063\u305b\u307f\u305f\u3044\u306a\u3053\u3068\u3092\u66f8\u3044\u3066\u3044\u308b\u304c\u30013\u6669\u306f\u304b\u304b\u3063\u305f\u3002\u4ed5\u4e8b\u3060\u3068\u3057\u305f\u3089\u30701\u65e5\u6f70\u308c\u305f\u3050\u3089\u3044\u6642\u9593\u304c\u304b\u304b\u3063\u305f\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u307e\u305a\u306fvagrant\u3067\u52d5\u3044\u3066\u308bubuntu 14.04\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\n$ pyenv shell 3.4.3\r\n\r\n$ pip install gunicorn\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u3064\u3065\u3044\u3066\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u306e\u5199\u7d4c<\/p>\n<p>~\/src\/gunicorn\/myapp\/myapp.py<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n\r\ndef app(environ, start_response):\r\n data = &quot;Hello World!\\n&quot;\r\n start_response(&quot;200 OK&quot;, &#x5B;\r\n (&quot;Content-Type&quot;, &quot;text\/plain&quot;),\r\n (&quot;Content-Length&quot;, str(len(data)))\r\n ])\r\nreturn iter(&#x5B;data])\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u52d5\u304b\u3057\u3066\u307f\u308b\u3068\u3001\u304a\u30fc\u52d5\u304f\u3002<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\nunicorn -w 4 myapp:app\r\n\r\n&#x5B;INFO] Listening at: http:\/\/127.0.0.1:8000 (13232)\r\n\r\n<\/pre>\n<p>\u3067\u3082\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u306f\u52d5\u4f5c\u306f\u3057\u306a\u3044\u3002vagrant\u306e\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c9\u306e\u8a2d\u5b9a\u3092\u3057\u3066\u3082\u30c0\u30e1\u3002web\u30b5\u30fc\u30d0\u3001\u3046\u3061\u306e\u5834\u5408\u306fnginx\u306e\u8a2d\u5b9a\u3082\u5fc5\u8981\u3089\u3057\u3044\u3002<\/p>\n<p><a href=\"http:\/\/i2bskn.hateblo.jp\/entry\/20120218\/1329547247\" target=\"_blank\">gunicorn\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb | i2bs\u306e\u65e5\u8a18<\/a><\/p>\n<p>\u306a\u3093\u3068\u306a\u304f\u771f\u4f3c\u3066gunicorn\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u4f5c\u6210\u3057\u3066\u3001vagrant\u30e6\u30fc\u30b6\u3092\u6240\u5c5e\u3055\u305b\u3066\u307f\u305f\u304c\u3001\u7d50\u5c40conf\u306e\u8a2d\u5b9a\u306f\u6b63\u3057\u304f\u8aad\u3081\u306a\u304b\u3063\u305f\u3002<\/p>\n<p>nginx\u306e\u8a2d\u5b9a\u3082unix\u30c9\u30e1\u30a4\u30f3\u30bd\u30b1\u30c3\u30c8\u306eupstream\u306e\u8a2d\u5b9a\u304c\u30ad\u30e2\u3063\u307d\u3044\u304csite-available\/default\u306b\u66f8\u3044\u3066\u308b\u3068\u3001\/var\/log\/nginx\/error.log\u306b\u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u304c\u51fa\u3066nginx\u304c\u8d77\u52d5\u3057\u306a\u3044\u3002<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">&quot;upstream&quot; directive is not allowed here<\/pre>\n<p>\u30b0\u30b0\u3063\u3066\u307f\u308b\u3068\u3069\u3046\u3082\u30d0\u30fc\u30c1\u30e3\u30eb\u30db\u30b9\u30c8\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3089\u3057\u304fconf.d\/\u306b\u306a\u3093\u304b\u66f8\u304f\u5fc5\u8981\u304c\u3042\u308b\u3068\u306e\u3053\u3068\u3002\u53c2\u8003\u306b\u3055\u305b\u3066\u3082\u3089\u3063\u305f\u30b5\u30a4\u30c8\u3067\u3082\u3088\u304f\u307f\u308b\u3068\u305d\u3046\u306a\u3063\u3066\u305f\u306e\u3067\u3001\u305d\u306e\u3088\u3046\u306b\u3057\u305f\u3002\u3067\u3082conf.\/d\u306e\u8a2d\u5b9a\u3068sites-available\u306e\u8a2d\u5b9a\u306e\u95a2\u4fc2\u6027\u304c\u5206\u304b\u3089\u306a\u304f\u306a\u3063\u305f\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>conf\u306e\u8a2d\u5b9a\u304c\u3069\u3046\u3082\u52b9\u304b\u306a\u3044\u306e\u3067\u3001CLI\u304b\u3089\u76f4\u63a5\u8d77\u52d5\u3002\u30a2\u30d7\u30ea\u3092\u66f8\u3044\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3001\u4ee5\u4e0b\u3092\u53e9\u304f\u3002<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\nunicorn -b &quot;unix:\/tmp\/gunicorn.sock&quot; myapp:app\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u4eca\u5ea6\u306fListening\u306elog\u304c\u5909\u308f\u3063\u305f\u3002<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\n&#x5B;INFO] Listening at: unix:\/tmp\/gunicorn.sock (13277)\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u304c\u3057\u304b\u3057\u3001http:\/\/127.0.0.1:18000\/\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001gunicorn\u306e\u30a2\u30d7\u30ea\u304c\u30a8\u30e9\u30fc\u3059\u308b\u3002(18000\u306fvagrant\u3078\u306ehttp\u30a2\u30af\u30bb\u30b9\u306eport forward\u306e\u8a2d\u5b9aport)<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\r\n&#x5B;ERROR] Error handling request&amp;nbsp;Traceback (most recent call last):\r\n File &quot;\/opt\/pyenv\/versions\/3.4.3\/lib\/python3.4\/site-packages\/gunicorn\/workers\/sync.py&quot;, line 177, in handle_request\r\n resp.write(item)\r\n File &quot;\/opt\/pyenv\/versions\/3.4.3\/lib\/python3.4\/site-packages\/gunicorn\/http\/wsgi.py&quot;, line 326, in write\r\n raise TypeError('%r is not a byte' % arg)\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&#8220;gunicorn type error not a byte&#8221;\u3067\u30b0\u30b0\u3063\u3066\u3001stackoverflow\u3067\u89e3\u6c7a\u3002<\/p>\n<p><a href=\"http:\/\/stackoverflow.com\/questions\/22974024\/gunicorn-python3-4-and-3-3-sends-in-response-only-headers-without-data\" target=\"_blank\">gunicorn (Python3.4 and 3.3) sends in response only headers without data | stackoverflow<\/a><\/p>\n<p>\u5143\u306e\u30a2\u30d7\u30ea\u304cpython 3\u7cfb\u3060\u3068\u30c0\u30e1\u3089\u3057\u3044\u3002\u4ee5\u4e0b\u306eresponse\u3068\u304a\u307c\u3057\u304d1\u884c\u3092\u4fee\u6b63\u3057\u3066\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u306e\u52d5\u4f5c\u306f\u78ba\u8a8d\u3067\u304d\u305f\u3002<\/p>\n<p>&#8211; return iter([data])<\/p>\n<p>+ return [bytes(data, &#8216;utf-8&#8217;)]<\/p>\n<p>&nbsp;<\/p>\n<p>\u6b8b\u3059\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306egunicorn\u8d77\u52d5\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>2015\/10\/05\u8ffd\u8a18<\/p>\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u66f8\u3051\u305f\u3002\u305f\u3076\u3093\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u554f\u984c\u3067\u3001daemon\u5316\u304c\u3067\u304d\u3066\u3044\u306a\u304b\u3063\u305f\u3002\u4ee5\u4e0b\u306f\u52d5\u4f5c\u304c\u78ba\u8a8d\u3067\u304d\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3001log\u30d5\u30a1\u30a4\u30eb\u306f\u5148\u306b\u4f5c\u6210\u3057\u3066\u3001chmod 666\u3057\u305f\u3002<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n\r\nimport multiprocessing\r\n\r\nbind = 'unix:\/tmp\/gunicorn.sock'\r\n\r\nworkers = 2\r\nworker_class = 'sync'\r\nworker_connections = 1000\r\nmax_requests = 1000\r\ntimeout = 30\r\nkeepalive = 2\r\n\r\ndebug = False\r\nspew = False\r\n\r\nprelood_app = True\r\ndaemon = True\r\npidfile = '\/tmp\/gunicorn.pid'\r\numask = 0\r\n#user = 'vagrant'\r\n#group = 'gunicorn'\r\n\r\naccesslog = '\/usr\/local\/gunicorn\/logs\/access.log'\r\nerrorlog = '\/usr\/local\/gunicorn\/logs\/error.log'\r\nloglevel = 'info'\r\n\r\nproc_name = 'gunicorn'\r\n\r\n<\/pre>\n<p>\u306a\u304a\u78ba\u8a8d\u3057\u305f\u30bd\u30d5\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3001\u4ee5\u4e0b\u3002<br \/>\npython 3.4.3<br \/>\nnginx 1.4.6<br \/>\ngunicorn 19.3.0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>django\u3067\u4f55\u304b\u4f5c\u3063\u3066\u904b\u7528\u3059\u308b\u305f\u3081\u306e\u6e96\u5099\u3068\u3057\u3066gunicorn\u3092\u4f7f\u3063\u3066\u307f\u305f\u3002 gunicorn \u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u306b\u306f\u7c21\u5358\u306b\u52d5\u304d\u307e\u3063\u305b\u307f\u305f\u3044\u306a\u3053\u3068\u3092\u66f8\u3044\u3066\u3044\u308b\u304c\u30013\u6669\u306f\u304b\u304b\u3063\u305f\u3002\u4ed5\u4e8b\u3060\u3068\u3057\u305f\u3089\u30701\u65e5\u6f70\u308c\u305f\u3050\u3089\u3044\u6642\u9593\u304c\u304b\u304b\u3063\u305f\u3002 &nbsp; \u307e\u305a\u306fvagrant\u3067\u52d5\u3044\u3066\u308bubuntu 14.04\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb $ pyenv shell 3.4.3 $ pip install gunicorn &nbsp; \u3064\u3065\u3044\u3066\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u306e\u5199\u7d4c ~\/src\/gunicorn\/myapp\/myapp.py def app(environ, start_response): data = &quot;Hello World!\\n&quot; start_response(&quot;200 OK&quot;, &#x5B; (&quot;Content-Type&quot;, &quot;text\/plain&quot;), (&quot;Content-Length&quot;, str(len(data))) ]) return iter(&#x5B;data]) &nbsp; \u52d5\u304b\u3057\u3066\u307f\u308b\u3068\u3001\u304a\u30fc\u52d5\u304f\u3002 unicorn -w 4 myapp:app &#x5B;INFO] Listening at: http:\/\/127.0.0.1:8000 (13232) \u3067\u3082\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u306f\u52d5\u4f5c\u306f\u3057\u306a\u3044\u3002vagrant\u306e\u30dd\u30fc\u30c8\u30d5\u30a9\u30ef\u30fc\u30c9\u306e\u8a2d\u5b9a\u3092\u3057\u3066\u3082\u30c0\u30e1\u3002web\u30b5\u30fc\u30d0\u3001\u3046\u3061\u306e\u5834\u5408\u306fnginx\u306e\u8a2d\u5b9a\u3082\u5fc5\u8981\u3089\u3057\u3044\u3002 gunicorn\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb | i2bs\u306e\u65e5\u8a18 \u306a\u3093\u3068\u306a\u304f\u771f\u4f3c\u3066gunicorn\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u4f5c\u6210\u3057\u3066\u3001vagrant\u30e6\u30fc\u30b6\u3092\u6240\u5c5e\u3055\u305b\u3066\u307f\u305f\u304c\u3001\u7d50\u5c40conf\u306e\u8a2d\u5b9a\u306f\u6b63\u3057\u304f\u8aad\u3081\u306a\u304b\u3063\u305f\u3002 nginx\u306e\u8a2d\u5b9a\u3082unix\u30c9\u30e1\u30a4\u30f3\u30bd\u30b1\u30c3\u30c8\u306eupstream\u306e\u8a2d\u5b9a\u304c\u30ad\u30e2\u3063\u307d\u3044\u304csite-available\/default\u306b\u66f8\u3044\u3066\u308b\u3068\u3001\/var\/log\/nginx\/error.log\u306b\u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u304c\u51fa\u3066nginx\u304c\u8d77\u52d5\u3057\u306a\u3044\u3002 &quot;upstream&quot; directive is not allowed here \u30b0\u30b0\u3063\u3066\u307f\u308b\u3068\u3069\u3046\u3082\u30d0\u30fc\u30c1\u30e3\u30eb\u30db\u30b9\u30c8\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3089\u3057\u304fconf.d\/\u306b\u306a\u3093\u304b\u66f8\u304f\u5fc5\u8981\u304c\u3042\u308b\u3068\u306e\u3053\u3068\u3002\u53c2\u8003\u306b\u3055\u305b\u3066\u3082\u3089\u3063\u305f\u30b5\u30a4\u30c8\u3067\u3082\u3088\u304f\u307f\u308b\u3068\u305d\u3046\u306a\u3063\u3066\u305f\u306e\u3067\u3001\u305d\u306e\u3088\u3046\u306b\u3057\u305f\u3002\u3067\u3082conf.\/d\u306e\u8a2d\u5b9a\u3068sites-available\u306e\u8a2d\u5b9a\u306e\u95a2\u4fc2\u6027\u304c\u5206\u304b\u3089\u306a\u304f\u306a\u3063\u305f\u3002 &nbsp; conf\u306e\u8a2d\u5b9a\u304c\u3069\u3046\u3082\u52b9\u304b\u306a\u3044\u306e\u3067\u3001CLI\u304b\u3089\u76f4\u63a5\u8d77\u52d5\u3002\u30a2\u30d7\u30ea\u3092\u66f8\u3044\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3001\u4ee5\u4e0b\u3092\u53e9\u304f\u3002 unicorn -b &quot;unix:\/tmp\/gunicorn.sock&quot; myapp:app &nbsp; \u4eca\u5ea6\u306fListening\u306elog\u304c\u5909\u308f\u3063\u305f\u3002 &#x5B;INFO] Listening at: unix:\/tmp\/gunicorn.sock (13277) &nbsp; \u304c\u3057\u304b\u3057\u3001http:\/\/127.0.0.1:18000\/\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001gunicorn\u306e\u30a2\u30d7\u30ea\u304c\u30a8\u30e9\u30fc\u3059\u308b\u3002(18000\u306fvagrant\u3078\u306ehttp\u30a2\u30af\u30bb\u30b9\u306eport forward\u306e\u8a2d\u5b9aport) &#x5B;ERROR] Error handling request&amp;nbsp;Traceback (most recent call last): File &quot;\/opt\/pyenv\/versions\/3.4.3\/lib\/python3.4\/site-packages\/gunicorn\/workers\/sync.py&quot;, line 177, in handle_request resp.write(item) File &quot;\/opt\/pyenv\/versions\/3.4.3\/lib\/python3.4\/site-packages\/gunicorn\/http\/wsgi.py&quot;, line 326, in write raise TypeError(&#8216;%r is not a byte&#8217; % arg) &nbsp; &#8220;gunicorn type error not a byte&#8221;\u3067\u30b0\u30b0\u3063\u3066\u3001stackoverflow\u3067\u89e3\u6c7a\u3002 gunicorn (Python3.4 and 3.3) sends in response only headers without data | stackoverflow \u5143\u306e\u30a2\u30d7\u30ea\u304cpython 3\u7cfb\u3060\u3068\u30c0\u30e1\u3089\u3057\u3044\u3002\u4ee5\u4e0b\u306eresponse\u3068\u304a\u307c\u3057\u304d1\u884c\u3092\u4fee\u6b63\u3057\u3066\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u306e\u52d5\u4f5c\u306f\u78ba\u8a8d\u3067\u304d\u305f\u3002 &#8211; return iter([data]) + return [bytes(data, &#8216;utf-8&#8217;)] &nbsp; \u6b8b\u3059\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306egunicorn\u8d77\u52d5\u3002 &nbsp; 2015\/10\/05\u8ffd\u8a18 \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u66f8\u3051\u305f\u3002\u305f\u3076\u3093\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u554f\u984c\u3067\u3001daemon\u5316\u304c\u3067\u304d\u3066\u3044\u306a\u304b\u3063\u305f\u3002\u4ee5\u4e0b\u306f\u52d5\u4f5c\u304c\u78ba\u8a8d\u3067\u304d\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3001log\u30d5\u30a1\u30a4\u30eb\u306f\u5148\u306b\u4f5c\u6210\u3057\u3066\u3001chmod 666\u3057\u305f\u3002 import multiprocessing bind = &#8216;unix:\/tmp\/gunicorn.sock&#8217; workers = 2 worker_class = &#8216;sync&#8217; worker_connections = 1000 max_requests = 1000 timeout = 30 keepalive = 2 debug = False spew = False prelood_app = True daemon = True pidfile = &#8216;\/tmp\/gunicorn.pid&#8217; umask = 0 #user = &#8216;vagrant&#8217; #group = &#8216;gunicorn&#8217; accesslog = &#8216;\/usr\/local\/gunicorn\/logs\/access.log&#8217; errorlog = &#8216;\/usr\/local\/gunicorn\/logs\/error.log&#8217; loglevel = &#8216;info&#8217; proc_name = &#8216;gunicorn&#8217; \u306a\u304a\u78ba\u8a8d\u3057\u305f\u30bd\u30d5\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3001\u4ee5\u4e0b\u3002 python 3.4.3 nginx 1.4.6 gunicorn 19.3.0<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[6],"tags":[59,42,8],"class_list":["post-213","post","type-post","status-publish","format-standard","hentry","category-computer","tag-gunicorn","tag-nginx","tag-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4Yc9l-3r","_links":{"self":[{"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=\/wp\/v2\/posts\/213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=213"}],"version-history":[{"count":5,"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=\/wp\/v2\/posts\/213\/revisions"}],"predecessor-version":[{"id":218,"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=\/wp\/v2\/posts\/213\/revisions\/218"}],"wp:attachment":[{"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/boltech21.net\/blog\/vottie\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}