ためすう
メソッドの定義されている箇所を見つける (Ruby)
2019-10-20やったこと
メソッドの定義されている箇所を探します。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
irb(main):005:0> Task.new.method(:to_query).source_location
=> ["/Users/xxxx/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/core_ext/object/to_query.rb", 13]
どこにのファイルで定義されている分かります。
参考
docker を使ってみる (チュートリアル Part3: サービス)
2019-10-17やったこと
docker を使ってみます。
チュートリアルの Part3 です。
調査
サービスとは、正に「本番環境におけるコンテナ」なのです。
docker-compose.yml の作成
プロダクションにおける Docker コンテナのあるべき挙動を定義します
docker-compose.yml
version: '3'
services:
web:
image: friendlyhello
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- '80:80'
networks:
- webnet
networks:
webnet:
Doker Swarm
Docker Swarm は Docker に対応するネイティブなクラスタリング用ツールです。Docker Swarm は標準 Docker API で操作できます。
コンテナを複数立ち上げる
$ docker swarm init
$ docker stack deploy -c docker-compose.yml getstartedlab
getstartedlab
というアプリケーションの名前をつけています。
サービスの情報表示
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
xxng7z8u0l7w getstartedlab_web replicated 5/5 friendlyhello:latest *:80->80/tcp
コンテナの一覧表示
$ docker container ls -q
d529dc4961e3
8c47e3a1207e
7e8a65af869f
4d03c61b387e
1e3780cdd23a
停止
$ docker stack rm getstartedlab
swarm は起動したまま
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
l8th1njjpb5qd71epemf95ony * linuxkit-025000000001 Ready Active Leader 18.09.2
swarm も停止
$ docker swarm leave --force
参考
Mac の launchctl を調べる
2019-10-17やったこと
Mac の launchctl
について調べます。
調査
launchd を使って、daemon、agent を管理するプログラムです。
plist の管理場所
~/Library/LaunchAgents Per-user agents provided by the user.
/Library/LaunchAgents Per-user agents provided by the administrator.
/Library/LaunchDaemons System-wide daemons provided by the administrator.
/System/Library/LaunchAgents Per-user agents provided by Apple.
/System/Library/LaunchDaemons System-wide daemons provided by Apple.
puma-dev の場合
unload します
$ launchctl unload ~/Library/LaunchAgents/io.puma.dev.plist
puma-dev
のプロセスを kill しても、消せなかったのですが、
これで制御することができました。
参考
docker を使ってみる (チュートリアル Part2)
2019-10-15やったこと
docker を使ってみます。
チュートリアルの Part2 です。
調査
Dockerfile の定義
コンテナで何をするのかということを定義します。
Dockerfile
# 公式 Python ランタイムを親イメージとして使用
FROM python:2.7-slim
# 作業ディレクトリを /app に設定
WORKDIR /app
# 現在のディレクトリの内容を、コンテナ内の /app にコピー
ADD . /app
# requirements.txt で指定された必要なパッケージを全てインストール
RUN pip install -r requirements.txt
# ポート 80 番をコンテナの外の世界でも利用可能に
EXPOSE 80
# 環境変数の定義
ENV NAME World
# コンテナ起動時に app.py を実行
CMD ["python", "app.py"]
※ 下記ファイルも必要ですが、参考サイトを見てください。
app.py
requirements.txt
Docker イメージを作成
$ docker build -t friendlyhello .
アプリケーションを起動する
$ docker run -p 4000:80 friendlyhello
$ curl http://localhost:4000
確認
実行中のコンテナID 2a2ef4f0bd30
の確認
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a2ef4f0bd30 friendlyhello "python app.py" 8 minutes ago Up 8 minutes 0.0.0.0:4000->80/tcp confident_tu
Docker Hub のイメージを利用する
Docker Hub のイメージを使い nginx を起動します。
$ docker pull nginx:latest
Dockerfile
FROM nginx:latest
# author
MAINTAINER hoge
ADD default.conf /etc/nginx/conf.d
RUN echo "now building..."
docker-compose.yml
version: '3'
services:
nginx:
build: .
ports:
- "8080:80"
volumes:
- ./public:/usr/share/nginx/html
設定ファイルを空で用意します
$ touch default.conf
コンテナ起動
$ docker-compose up
コンテナに入る
nginx_nginx_1
はコンテナ名です。
$ docker exec -i -t nginx_nginx_1 bash
設定ファイルは default.conf
と同じで空でした。
# cat /etc/nginx/conf.d/default.conf
参考
puma-dev を使ってみる
2019-10-15やったこと
puma-dev を使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
セットアップ
$ brew install puma/puma/puma-dev
Mac OS でセットアップ
# Configure some DNS settings that have to be done as root
$ sudo puma-dev -setup
# Configure puma-dev to run in the background on ports 80 and 443 with the domain `.test`.
$ puma-dev -install
シンボリックリンクの設定
※ /path/to/my/app は実行したいアプリケーションです。
$ cd ~/.puma-dev; ln -s /path/to/my/app test
test.test
でアプリケーションを閲覧することができます。
おまけ
ログを見る
$ less ~/Library/Logs/puma-dev.log
puma-dev を止める
$ puma-dev -stop
参考
docker を使ってみる (チュートリアル Part1)
2019-10-15やったこと
docker を使ってみます。
チュートリアルの Part1 です。
調査
image
実行可能なパッケージであり、軽量で、単独で動作(stand-alone)します。
container
image を実行する環境のこと
Docker Engine (Docker の本体)
$ docker --version
Docker version 18.09.2, build 6247962
Docker Machine
Docker Machine は仮想マシン上に Docker Engine をインストールするツールであり、 docker-machine コマンドを使ってホストを管理します。
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01
Docker Compose
Compose は複数のコンテナを使う Docker アプリケーションを定義・実行するためのツールです
$ docker-machine --version
docker-machine version 0.16.1, build cce350d7
参考
やったこと
html_safe を使ってみます。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
$ rails --version
Rails 5.2.3
調査
ファイルを準備します。
app/controllers/tasks_controller.rb
class TasksController < ApplicationController
def index
@message = '<form><a href="#">ddd</a><br>ddd2</form>'
end
end
app/views/tasks/index.html.erb
<%= @message %>
<hr>
<%= @message.html_safe %>
<hr>
<%= sanitize @message %>
出力結果
<form><a href="#">ddd</a><br>ddd2</form>
<hr>
<form><a href="#">ddd</a><br>ddd2</form>
<hr>
<a href="#">ddd</a>
<br>
ddd2
html_safe
より、sanitize
が推奨されているようです。
form タグが表示されなくなっていることが分かります。
参考
開発環境の設定ファイルをバージョン管理する
2019-10-14やったこと
開発環境の設定ファイルをバージョン管理します。
調査
バージョン管理するファイル確認
dotfiles
というディレクトリで設定ファイルを管理しているとします。
今回は .bash_profile
と .vimrc
を対象とします。
$ cd ~/dotfiles
$ tree -a .bash_profile .vimrc
.bash_profile [error opening dir]
.vimrc [error opening dir]
シンボリックリンクを適用する
link.sh
ln -sf ~/dotfiles/.vimrc ~/.vimrc
ln -sf ~/dotfiles/.bash_profile ~/.bash_profile
$ cd ~/dotfiles
$ link.sh
参考
unix コマンドを作る
2019-10-14やったこと
自作の unix コマンドを作ります。
調査
スクリプトを作成する
/usr/local/bin/hoge
#!/bin/sh
echo "Hello"
権限設定
$ chmod a+x /usr/local/bin/hoge
実行
$ hoge
Hello
参考
make を使ってみる (unix)
2019-10-11やったこと
make を使ってみます
確認環境
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
調査
Makefile の作成
Makefile
all:
@echo Hello1
make を実行する
$ make
Hello1