Intellijのdebug buildが5秒くらい遅延する現象の解決

HighSierraにしてから、Intellijのdebug buildが5秒くらい待たされると思って、調べてたのでメモ

エントリーはあがっていた模様
https://youtrack.jetbrains.com/issue/IDEA-157303#comment=27-1626793

対応としては/etc/hostshostnameの値を書いてあげればいいもよう

$ uname -n
xxxx.local  <- これを/etc/hostsに書いてあげればいい

$ sudo vi /etc/hosts
127.0.0.1  localhost    xxxx.local   <- ここに追加

以上で対応完了

OAuth2のメモ

Github API でOAuth2の認証フローのメモ

  1. login画面を呼ぶ
https://github.com/login/oauth/authorize?client_id=${client-id}
  1. ログイン画面
    ログイン画面でログインする

  2. アクセスコードを取得する

https://{コールバックURL}/?code=${アクセスコード}
  1. アクセストークンを取得する
curl "https://github.com/login/oauth/access_token?code=${アクセスコード}&client_id=${client_id}&client_secret=${client_secret}"

access_token=${アクセストークン}&scope=&token_type=bearer  <- これが応答される

  1. アクセストークンを使用してデータを取得
https://api.github.com/user?access_token=${アクセストークン} | jq

{
  "login": 
  "id": 
  "avatar_url": 
  "gravatar_id": 
  "url": 
  "html_url": 
  "followers_url": 
  "following_url": 
  "gists_url": 
  "starred_url": 
  "subscriptions_url": 
  "organizations_url": 
  "repos_url": 
  "events_url": 
  "received_events_url": 
  "type": "User",
  "site_admin":
  "name": 
  "company": 
  "blog": "",
  "location": 
  "email":
  "hireable": 
  "bio": null,
  "public_repos": 
  "public_gists": 
  "followers": 
  "following": 
  "created_at": 
  "updated_at": 
}

こんな感じで取得できます。アクセストークンは特に期限とかは特にないようですね。

springbootのテストについて-備忘録-

springbootでテスト書こうとしたときにつまづいたので、備忘録

アノテーションの仕分け

@SpringBootTestなし

  • @Autowiredは使用してもDIされない -> @injectMocksを使用する
  • @MockBeanは使用ないかも(@InjectMocksの方の変数がnullになった) -> @Mockにする
  • @Mockは使用できる

@SpringBootTestあり

  • @injectMocksは使用できない -> @Autowiredを使用する
  • @MockBeanは使用できる
  • @Mockは使用できる

@WebMvcTest

  • Controllerのテストで使用
  • HTTPのMethod等が使用できる
  • アノテーションに引数にcontrollerクラス情報を引数に渡す(ex. @WebMvcTest(SampleController.class) )

起動

@SpringBootTestあり

起動遅い … tomcat等が立ち上がっているからであろう

@SpringBootTestなし

@SpringBootTestありよりは速い

docker-compose でportsが反映されない問題…

docker-composeでportsの設定が反映されない問題がでて、悩んでたのですが、実はコマンド間違えだということがわかりました。
しかし、絶対また同じことをする自信があるので、備忘録

こんなdocker-compose.yamlがあります。

version: "3"
services: 
  # activemq
  activemq:
    build: .
    image: activemq:5.5.2
    container_name: activemq
    ports:
      - "1883:1883"
      - "5672:5672"
      - "8161:8161"
      - "61613:61613"
      - "61614:61614"
      - "61616:61616"

ports設定を6つしたいのです。これを間違ったコマンドで起動します

$ docker-compose run -d activemq 
$ docker ps 
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
88f158290f09        activemq:5.5.2            "/bin/sh -c './bin..."   3 seconds ago       Up 1 second         1883/tcp, 5672/tcp, 8161/tcp, 61613-61614/tcp, 61616/tcp    

このように・・・ポートがコンテナ側しかあかないのです。これでなんでかなー?ってなってました。
docker-composeの場合は、runは使わずにupを使いましょう

下記、正しいコマンド

$ docker-compose up -d 
$ docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                         NAMES
d58e6db65202        activemq:5.5.2      "/bin/sh -c './bin..."   5 seconds ago       Up 3 seconds        0.0.0.0:1883->1883/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:8161->8161/tcp, 0.0.0.0:61613-61614->61613-61614/tcp,0.0.0.0:61616->61616/tcp   activemq

これで、ホスト側とコンテナ側でのポートフォワーディングができています。

dockerはプロセスがforegroundじゃないと起動とともに終了する

備忘録です。
人が作ったイメージばっかり作って、たまに自分でイメージ作って起動しようとすると「うっ。。」ってなるので、メモ。

  • shell scriptでループを回す方法
  • supervisordを入れる方法

shell scriptでループ回す方法

一番簡単なのは、これ

# foreground.sh #

#!/bin/sh

while true 
do
  sleep 1000
done
# Dockerfile

FROM alpine

ADD foreground.sh /etc/foreground.sh
CMD /etc/foreground.sh

これかいて

$ docker build -t sample-alpine .
$ docker run -d --rm --name sample-alpine

これで落ちなくなる。まぁでも大変。

supervisord入れておく方法

supervisordというpythonのツールを入れておく

こんな感じになります。

# DockerFile #
FROM alpine:latest

MAINTAINER Kohei Sasaki <kohei.sasaki.a@gmail.com>

# python2 install
RUN apk update && apk add python2 && apk add py2-pip
# supervisord install
RUN pip install supervisor==3.3.3 && echo_supervisord_conf > /etc/supervisord.conf
# servisord start non daemon mode
CMD supervisord --nodaemon --configuration /etc/supervisord.conf

githubにファイル置いておきます!

github