10月4週

月曜

  • アルファ版を動かすために最小構成で動かしてみる

EC2にインストール

利用できるバージョンの確認

$ amazon-linux-extras list | grep golang
→29  golang1.11=latest        enabled      \

インストール

amazon-linux-extras install golang1.11

GOPATHの追記

export GOPATH="$HOME/go"
export PATH=$PATH:$GOPATH/bin

インストール確認

go version
→go version go1.13.4 linux/amd64

ec2にmysql5.7を導入

qiita.com

手順

  • デフォルトでmariaDBがデフォルトが入っているのでアンインストールしておく。
$ sudo yum list installed | grep mariadb
$ sudo yum remove mariadb-libs

リポジトリを追加する。centos7系なのでel6ではなくel7をインストールする。

$ sudo yum install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

インストールする。

$ sudo yum install mysql-community-server

依存性の問題が解決できないときはel6で入れてしまっていなか確認する。(念のためキャッシュも消しておくとよい。)

$ sudo yum clean all
$ sudo rm -rf /var/cache/yum

正しくインストールされたことを確認する。

$ yum repolist enabled | grep "mysql.*-community.*"

バージョンを確認する。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using  EditLine wrapper
$ mysqld -V
mysqld  Ver 5.7.23 for Linux on x86_64 (MySQL Community Server (GPL))

起動してみる。

$ sudo /bin/systemctl start mysqld.service

起動できているか確認してみる。

$ systemctl list-units | grep mysqld.service
mysqld.service   loaded active running   MySQL Server

自動で起動するようにしておく。

  • 現在の状態を確認する
$ systemctl is-enabled mysqld.service
disabled
  • enableに変更しておく
$ systemctl enable mysqld.service

ログインしてみる。

$ mysql -u root -p
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
  • デフォルトでパスワードかかっていた…
  • パスワードを確認する。
$ cat /var/log/mysqld.log | grep password
2018-09-01T10:27:36.011362Z 1 [Note] A temporary password is generated for root@localhost: ************

調べたパスワードで再度ログインしてみる。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.23

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

できた!

  • パスワードを変更しておく。デフォルトの制約が強いのでちょっと弱めておく。
mysql> SET GLOBAL validate_password_length=8;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER root@localhost IDENTIFIED BY 'new password';
Query OK, 0 rows affected (0.00 sec)

文字コードを確認する。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

設定ファイルに以下の2行を追記して再起動する。

/etc/my.cnf
[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8
$ sudo /bin/systemctl restart mysqld.service

新しいユーザーを作成する。

mysql> GRANT ALL PRIVILEGES ON `app_production`.* TO `username`@localhost IDENTIFIED BY 'new password';

ログインできるか試してみる。

$ mysql -u username -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

各リージョンにおけるAMIのIDの取得方法

aws ssm get-parameter \
  --name /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 \
  --query "Parameter.Value" \
  --{リージョン名}
  • これで"ami-0c2f25c1f66a1ff4d"みたいに返ってくる

10月3週

土曜:

djangoフィルターの作成

  • setting.pyの設定
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'django_filters',  # 追加
    'rest_framework.authtoken',
    'corsheaders',
    'lottery_api.apps.LotteryApiConfig',
    'lottery_batch.apps.LotteryBatchConfig',
]

# 追加
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
  • filters.pyを新規作成(timesをフィルタリングしたい場合)
from django_filters import rest_framework as filters

from lottery_api.models import (
    LotoSeven,
)


class LotoSevenFilter(filters.FilterSet):
    times = filters.RangeFilter(field_name='times')

    class Meta:
        model = LotoSeven
        fields = ['times']
  • viewに組み込む
# 汎用APIView ListAPIView (リストを取得するだけの用途)他にもCreateAPIViewとかがある
class LotoSevenListView(generics.ListAPIView):
    queryset = LotoSeven.objects.all()
    serializer_class = serializers.LotoSevenSerializer
    filter_class = LotoSevenFilter  # 追加

    def get_queryset(self):
        return self.queryset.order_by('times')

10月2週

react

  • Api周りはApiContextというのを作ってルートに設置することでどこからでも使えるようにしてる
  • axiosでbodyに詰めたい時はFormDataを使う

django

逆参照とは

  • 外部キー制約設定をしたモデルについて逆の参照ができる

from django.db import models

class Food(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Person(models.Model):
    name = models.CharField(max_length=100)
    favorite_food = models.ForeignKey(Food, on_delete="CASCADE", null=True)

    def __str__(self):
        return self.name
  • 上記ではPersonのfavorite_food(人の好きな食べ物)として外部キーが設定されているが、逆参照と使うとFoodのperson_setとして呼び出すことができる。どういうことか↓
# 参照
>>> person1 = Person.objects.get(name="ジョブス")
>>> person1.favorite_food
<Food: 寿司>

# 逆参照
>>> food1 = Food.objects.get(name="寿司")
>>> food1.person_set.all()
<QuerySet [<Person: ジョブス>, <Person: ローラ>, <Person: ジョン>]>