📖 https://shogi-server.osdn.jp/
「 Linuxのtarボールに 📄pax_global_header
というファイルが入ってるんだけど……」
「 👆 LICENSE ファイルが入ってないな……、 README から開けてみるかだぜ」
「 README には ライセンス書いてないな。
じゃあ ソースファイルの先頭に ライセンスの全文書いてるやつかだぜ?」
「 GPL2 は ソースの冒頭にそれを書く必要があるようだぜ」
「 他人のソースを改造したときの Author
の書き方って どうやるんだぜ?」
📖 apery
📖 exerb
「 じゃあ ソースからコンパイルしろだぜ。
Ruby 2.1 系統らしいぜ」
「 👆 Ruby 2.4 の公式サポートが終了してるのに?」
「 じゃあ Ruby 2.1 のコードを Ruby 3.0.1 にアップデートしましょう」
「 👆 最新の Ruby を入れようとしたら 入らなかったぜ」
「 サーバー立ってんなら 将棋所でアクセスしたらいいんじゃないの?」
「 👆 将棋所から接続できたみたいだな、対局は始まらないけど」
「 Dockerfile 付いてるし、Dockerで動かしたらどうだぜ?」
cd c:\GitHub\shogi-server
docker build . -t muzudho/shogi-server
docker images
docker run -p 4081:4081 -d muzudho/shogi-server
docker ps
「 対局待ち に進むからログインはできてるみたいなんだが、対局は始まらないぜ」
docker ps
docker logs <CONTAINER ID>
「 👆 同じIDのユーザーでも作ってしまったかだぜ?
ログインし直すか」
docker ps
docker exec -it <CONTAINER ID> /bin/bash
cd test
ruby TC_ALL.rb
「 👆 Jasmine系っぽいプログレス出してるけど。
hoge
とか入れたのが悪かったのかだぜ?」
「 players.yaml
の中に gps_normal
プレイヤーがいないんじゃないの?」
「 👆 確かにいないが、テストに合わせてデータを合わせたら テストにならんだろ。
このファイルの書き方も分からんし」
「 👆 Dockerコンテナの外の players.yaml
の中には gps_normal
居るわよ?」
exit
docker ps
docker stop <CONTAINER ID>
docker run -p 4081:4081 -d muzudho/shogi-server
docker ps
docker exec -it <CONTAINER ID> /bin/bash
cd test
ruby TC_ALL.rb
「 players.yaml
の中に gps_normal
を書いてしまいましょう」
apt-get update
apt-get install -y vim
vim players.yaml
players:
0:
gps_normal+e293220e3f8a3e59f79f6b0efffaa931:
name: gps_normal
rate: -1752.0
win: 3384.04877829976
loss: 906.949084230512
rating_group: 0
last_modified: 2008-05-08 23:50:54.000000000 +09:00
「 👆 これは 295件 プレイヤーデータを入れろというテストかだぜ?」
「 👆 2094 を 7 で割ると 14、63、63、 だいたい 299 かだぜ。 295 に近いな」
「 そのファイルを Dockerコンテナの中に入れたらいいんじゃない?」
「 👆 .dockerignore ファイルに .yaml
はコピーしないように書いてるぜ」
「 .dockerignore
ファイルを無効にしようぜ?」
docker build . -t muzudho/shogi-server
「 ctime
って ファイル作成日付じゃないの? しかも9時間ずれてるって日本と米国よ」
「 Ruby 2.1 と 2.7 の間で ctime の仕様が異なるのかだぜ?」
「 👆 9時間ずれてるの直せば、 UTF-8
かどうかは関係ないんじゃないか?」
# ここに置いておくとするぜ(^~^)
cd c:\GitHub\shogi-server
docker build . -t muzudho/shogi-server
docker images
docker run -p 4081:4081 -e TZ=Asia/Tokyo -d muzudho/shogi-server
docker ps
# テストをするために Dockerコンテナに入れだぜ(^~^)
docker exec -it <CONTAINER ID> /bin/bash
cd test
ruby TC_ALL.rb
「 👆 タイムゾーン付けたらフェイラーは 0 になった。エラーは 31」
Error: test_toryo(TestChallenge): Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "localhost" port 4000
「 関係なかった。 Docker を使ったんで、 localhost
が Dockerコンテナを指しているのが問題か?」
apt-get update
apt-get install -y curl
「 Webサーバーじゃないんだから、 Curl 入れても意味なくない?」
curl localhost:4081
curl localhost:4000
ENV EVENT local
# Test
ENV PORT 4000
ENV MAX_IDENTIFIER 32
「 👆 Dockerfile の中でポート番号指定してたんで、ここを変えてみるぜ」
「 その 2 は players.yml
と タイムゾーンだろ」
CMD ./shogi-server --daemon /logs --max-identifier $MAX_IDENTIFIER $EVENT $PORT -e TZ=Asia/Tokyo & tail -F /logs/shogi-server.log
「 👆 Dockerfile にタイムゾーンを足してみるぜ」
ruby TC_functional.rb
$localhost = "localhost"
「 それが localhost
で指してほしかったホスト名だぜ」
apt-get install -y iproute2
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
「 将棋サーバーがまだ立ってないから テストできないということは?」
ruby shogi-server hoge 4000 &
jobs
[1]+ Running ruby shogi-server hoge 4000 &
cd test
ruby TC_ALL.rb
「 でもなんで 将棋サーバー 立ってなかったの? Dockerfile の中で立てたんじゃないの?」
「 👆 サーバーが立ってないときの curl はこんな感じ」
「 じゃあ docker run
してもサーバー立ってないのよ」
/
shogi-server/
shogi_server/
shogi-server
「 👆 shogi-server
ディレクトリーの中に shogi_server
ディレクトリがあったり、
shogi-server
ディレクトリーの中に shogi-server
ファイルが置いてないかだぜ?」
「 👆 logs
ディレクトリー はどこに置いてある想定で、 shogi-server.log
の中身は最初どのような内容を想定しているんだぜ?」
「 トップ階層に logs
ディレクトリーがあって、その中に 内容が空っぽの shogi-server.log
ファイルがある想定だろ」
2021-05-18T23:23:03 [INFO] WEBrick 1.3.1
2021-05-18T23:23:03 [INFO] ruby 2.3.3 (2016-11-21) [x86_64-linux-gnu]
2021-05-18T23:23:03 [INFO] server started [Revision: 20201206]
2021-05-18T23:23:03 [INFO] WEBrick::GenericServer#start: pid=13 port=4000
「 ファイルが無くて作ったというメッセージの直後にサーバーが起動して、その4行が書き込まれてるんじゃない?」
touch /logs/shogi-server.log
「 👆 ファイルが無いと思われる前に、空ファイルを作ってしまうかだぜ?」
「 意味なかった。
サーバーの shogi-server.log
ファイルと、テストの shogi-server.log
は別物にしないといけないということはないかだぜ?」
/logs # テスト用のlogsフォルダは第一階層固定
/shogi-server/logs # サーバー用のlogsフォルダはどこでもいいので仮にここにする
# 間違い?
cd /shogi-server
ruby shogi-server 以下略
# こうする?
ruby /shogi-server/shogi-server 以下略
「 テスト用のログ・ディレクトリーは、 TC_functional.rb ファイルの1階層上にあるんじゃない?」
/logs/shogi-server-docker.log # tail -f で流してるログは、ここにする
/shogi-server/logs # デーモンのlogsフォルダはどこでもいいので仮にここにする。テストはここのlogsフォルダを見る?
「 👆 tail -f
で流してるログが邪魔してるんじゃないかだぜ? こう分けたろ」
tail -f /dev/null
「 ログ・ディレクトリーって 年、月、日 の3階層で出てくるのかだぜ?」
「 👆 これ、 logs
ディレクトリーのテストではないのでは」
「 多分 コマンドを呼び出すときの カレント・ディレクトリをどこかで1階層ずらしてしまってるんだぜ。 Docker使い慣れてないしな」
「 違うぜ。カレント・ディレクトリに さまざまなファイルが出力されるんだぜ。
だから カレント・ディレクトリは logs ディレクトリに合わせておかなければいけないんだぜ」
ruby shogi-server --daemon /logs 以下略
「 👆 上記のように デーモンのディレクトリを logs
にすると、いろんなものがそこに書き出されるぜ。
テストをするときは このコマンドを打鍵してはいけないのでは」
ruby shogi-server test 4000 --daemon . 以下略
「 👆 テスト中に 起こったり 起こらなかったりする Reader thread interrupted
も何か分かんね」
tail -f /shogi-server/shogi-server.log
「 フラッドゲートって 何時0分とか 何時30分に始まるのでは?」
「 👆 ポート変えたらすぐ動いた。 無印のサーバー対局はポート 4081、フラッドゲートのサーバーと、テストのときは ポート 4000 かな」
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!