メンチカツ

ロースカツが好きです

【メモ】docker-compose 環境の Ruby on Rails で bundle install した Gem が利用できない

$ docker-compose run web bundle install

 ...

Bundle complete! ...

となったはずなのに、いざ利用しようとすると

Could not find [installed gem] in any of the sources
Run `bundle install` to install missing gems.

と出る。

bundle install をした後はbuildをする必要があるのですね。

$ docker-compose up --build #が都度必要!

Railsコンパイルいらずなので、ビルドしないとダメな状況についてついつい忘れがちです、私は。

調べて行くうちにビルドしなくても良いように出来ることを知ったので、早速導入しました!感謝です!

qiita.com

【gRPC-Web】protoc-gen-grpc-web: program not found or is not executable

gRPCのWebクライアントが正式リリースされましたね

gRPC-Web is going GA

www.cncf.io

なんか楽しそうなので触ってみました。

が、早々に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.com

というかここに書いてあった。

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に入れました。

https://github.com/pilu/fresh

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

ちなみに私はこれだけでは解決に至りませんでした。ので続き

【メモ】Makefileで複数のターゲットを順番に呼ぶ

Makefile

run: targetA targetB

targetAが完了してからtargetBを呼んでほしいときは、

run: targetA; targetB

間にセミコロンを入れると逐次実行してくれます。知らなかった。

ZeitのNowでServerless Docker(Beta)を試す

zeit.co

という記事を見たので試してみました。

▲Nowとは

zeit.co

  • 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.公式クライアントアプリをインストール

f:id:easy-breezy:20180827132819p:plain

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,

これでもうなんでもかんでも同じインデントになります。

ここで教えてもらいました

stackoverflow.com