【gRPC-Web】protoc-gen-grpc-web: program not found or is not executable
gRPCのWebクライアントが正式リリースされましたね
gRPC-Web is going GA
なんか楽しそうなので触ってみました。
が、早々にprotocでこけた。
protoc todos.proto \ --js_out=import_style=commonjs:./output \ --grpc-web_out=import_style=commonjs,mode=grpcwebtext:./output #protoc-gen-grpc-web: program not found or is not executable #--grpc-web_out: protoc-gen-grpc-web: Plugin failed with status code 1.
protoc-gen-grpc-webをインストールするために、grpc-webのリポジトリのMakefileを実行する必要があるようです。
というかここに書いてあった。
GitHub - grpc/grpc-web: gRPC for Web Clients
というわけで以下を実行
git clone https://github.com/grpc/grpc-web.git cd grpc-web make install-plugin
動くようになりました。
【メモ】golangのライブリローディング fresh(on Docker Compose) で inotify_init: too many open files
こちらで解決しなかった inotify_init: too many open files
watchするファイル数が多すぎるのが原因だったので、freshのconfigを用意してvendor
ディレクトリをignoredに入れました。
root: . tmp_path: ./tmp build_name: runner-build build_log: runner-build-errors.log valid_ext: .go no_rebuild_ext: .tpl, .tmpl, .html ignored: vendor, assets, tmp build_delay: 600 colors: 1 log_color_main: cyan log_color_build: yellow log_color_runner: green log_color_watcher: magenta log_color_app:
作成したconfigを指定して起動するようにします。
fresh -c fresh.conf server.go
これで無事エラーなく動作するようになりました。
【メモ】Docker Compose で inotify_init: too many open files
Docker(compose)に乗せたgolangのアプリにライブリロード(fresh)を入れたら
inotify_init: too many open files
エラーで起動しなくなりました。
これは docker-compose
に以下のように ulimits
セクションを追加したら解消されるようです。
ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000
https://docs.docker.com/compose/compose-file/#ulimits
ちなみに私はこれだけでは解決に至りませんでした。ので続き
ZeitのNowでServerless Docker(Beta)を試す
という記事を見たので試してみました。
▲Nowとは
- Zeit(←ツァイトと読む)が作ってるシンプルなPaaS
- Dockerizeされたものならデプロイ可能
- 最大3インスタンスまでは無料で使える
Zeitとは
Next.js(ReactでSSRを提供するフレームワーク)やMicro(Node.jsのExpress相当のフレームワーク)を作ってる会社。
Mongoose(Node.jsからMongoDBを操作するためのライブラリ)やsocket.io(Node.jsからWebSocketを使うためのライブラリ)を作った人が所属してるそうです。
▲NowのServerless Docker(ベータ)とは
- コールドブート(電源OFFからの起動)が早い
- CPU、メモリの割り当てが出来る(
c.125-m512
というように) - 最大実行時間(デフォルトは5分、最大30分)
- オートスケーリングも出来る(デフォルトは10)
- DockerfileにEXPOSEでポート番号を書かなくても良い
やってみよう
1.公式クライアントアプリをインストール
2.Dockerfile
を用意。EXPOSEいらない。ここではswaggerを立ててみる。書くのは1行だけ。
FROM swaggerapi/swagger-ui
3.Dockerfileと同じところにnow.json
を用意。何も考えずに以下のように書く。
{ "type": "docker", "features": { "cloud": "v2" } }
4.作成した2ファイルがあるディレクトリからターミナルでnow
と叩く
無料版(OSS版)だとpublicアクセスになってしまうよと言われるので、よければ「y」を入力。
> Success! Deployment ready
を出たら成功です。
> https://[ディレクトリ名]-[uniqueキー].now.sh [in clipboard]
と返って来てるので、ブラウザからアクセスするとswaggerサーバが起動しています。
【メモ】VSCodeでインデントを2(とか4)スペースにしたい
eslintとか抜きにして、もうインデントは全部固定スペースにしたいんじゃ
という人は、「Code」-「基本設定」-「設定」を開いて、ユーザー設定に以下を追加しよう!
"editor.tabSize": 2, //お好きな整数値を! "editor.insertSpaces": true, "editor.detectIndentation": false,
これでもうなんでもかんでも同じインデントになります。
ここで教えてもらいました