docker-composeでrailsとmysqlを使う
ディレクトリ構成
./ ├── Dockerfile ├── docker-compose.yml ├── db_volume/ ├── mysql-confd/ │ └── default_authentication.cnf └── src/ ├── Gemfile └── Gemfile.lock
ファイルの説明
Dockerfile
railsのアプリ用のDockerfileを定義する
mysqlと連携するためにmysql-clientをインストールしている
FROM ruby:latest RUN apt-get update -qq && \ apt-get install -y build-essential && \ apt-get install -y libpq-dev && \ apt-get install -y mysql-client && \ apt-get install -y nodejs RUN mkdir /myapp ENV APP_ROOT /myapp WORKDIR $APP_ROOT ADD ./src/Gemfile $APP_ROOT/Gemfile ADD ./src/Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle install ADD ./src/ $APP_ROOT
docker-compose
mysqlのバージョンが8以上だと認証でエラーになるので設定ファイルをにマウントする
参考
また
./db_volume:/var/lib/mysqlでDBを永続化している
version: '3' services: db: image: mysql:latest volumes: - ./mysql-confd:/etc/mysql/conf.d - ./db_volume:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: root ports: - "3306:3306" web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - ./src:/myapp ports: - "3000:3000" links: - db
default_authentication.cnf
認証用の設定ファイル
[mysqld] default_authentication_plugin= mysql_native_password
Gemfile
source 'https://rubygems.org' gem 'rails', '5.1.6'
Gemfile.lockも作成しておく(中身は空)
$ touch ./src/Gemfile.lock
プロジェクトの構築
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
--skip-bundleでgemのインストールを回避
実行後 ./src 配下に新しいアプリケーションが作成されている
データベースに接続
./src/config/database.ymlを
password部分とhostをdocker-composeで定義した内容に変更
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: root host: db
dockerの起動
ビルド
$ docker-compose build
起動
$ docker-compose up
DBの作成
$ docker-compose run web rails db:create
確認
ブラウザでlocalhost:3000にアクセス
railsのコンテナにアクセスしてDBとの接続確認
$ docker exec -it コンテナID /bin/bash
接続したコンテナからDBに接続
$ rails dbconsole
pythonでlistから辞書を作る、辞書からjsonを作る
まずはlistから辞書を作る
list_col = ['col1', 'col2', 'col3', 'col4', 'col5'] list_data = [1, 2, 3, 4, 5] dict_data = dict(zip(list_col, list_data)) print(dict_data) # {'col1': 1, 'col2': 2, 'col3': 3, 'col4': 4, 'col5': 5}
次に辞書からjsonを作る
import json json_data = json.dumps(dict_data) print(json_data) # {"col1": 1, "col2": 2, "col3": 3, "col4": 4, "col5": 5}
windwosのGOPATH
setx GOPATH %USERPROFILE%\go
vimをちゃんとやる9
:sort
アルファベット順にソートできる
自動補完呼び出し方法一覧
コマンド | 種類 |
---|---|
<C-a> | 汎用キーワード |
<C-x><C-n> | 現在バッファのキーワード |
<C-x><C-i> | インクルードされているファイルのキーワード |
<C-x><C-]> | tagsファイルのキーワード |
<C-x><C-k> | 辞書のルックアップ |
<C-x><C-l> | 行全体の補完 |
<C-x><C-f> | ファイル名を補完 |
<C-x><C-o> | オムニ補完 |
ポップメニューの操作
キー | 操作 |
---|---|
<C-n> | 次のマッチ |
<C-p> | 前のマッチ |
<C-y> | 選択されているマッチを入力 |
<C-e> | テキストに戻る |
vimをちゃんとやる8
<C-r><C-w>
検索の自動補完
:%s/{文字}//gn
文字数をカウント
:%s/{対象文字}/{置換後の文字}/g
ファイルの対象文字を置換する
:s/{対象文字}/{置換後の文字} で初めの1文字
:s/{対象文字}/{置換後の文字}/g で行のみ
:%s/{対象文字}/{置換後の文字}/g でファイル全体
:%s/{対象文字}/{置換後の文字}/gc
1文字1文字置換するかどうか確認できる
qで終了
aでカーソル以降全て置換
:%s\=@0/g
レジスタ0の中身を対象に置換する
g&
直前の置換をファイル全体に適用する
gv
直前の選択範囲を再度選択する
csvのフィールドを入れ替える
/\v[^,]*,([^,]),([^,])$
:%s//\3,\2,\1
列選択して、順序入れ替え
2つの単語を入れ替える
/\v(<単語A>|<単語B>)
:%s//\={"単語A":"単語B","単語B":"単語A"}[submatch(1)]/g