DockerのMySQLの文字コードをutf8mb4にする

環境

結論

  • docker-compose.ymlでcommandを追加してcharacterを設定した

状況

  • 先日Docker(docker-compose)でMySQLのimageをしてDjangoの環境を作ったのですが、いざDatabaseに保存してみたらエラーが出てしまいました

  • 以下エラー文

jango.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE3\\x81\\xAF\\xE3\\x81\\x98...' for column 'column名' at row 1")

調査

  • とりあえずググる
  • 文字コードの関係で日本語が保存できない様子
    • 英語だったら普通に保存された
  • mysqlのコンテナに入ってmysql -u root -pmysqlにログイン
  • database選択
  • variablesに設定されている値を確認
mysql> show variables like "chara%";
  • デフォルトでlatin1が設定されていた

utf8mb4(utf8)に変更する

  • 日本語が使用できて現状最も多様性がありそうなutf8mb4に変更する
    • utf8でもいいが、utf8mb4だと絵文字や難しい漢字とかが使えるとのこと
  • dbのservicesにcommandを追加した
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

参考

MySQLの文字コード事情 2017版

Django 環境変数をdjango-environで設定する

DjanogチュートリアルDjango Girlsチュートリアルを終えたので、他の作ってみるかと環境を作っているところです。

pythonには気軽に仮想環境が作れるvenv(virtualenv)やAnacondaなどがありますが、Dockerを使って環境を作ったりしていました。

今回は上記のチュートリアルで行われなかったsetting.pyなどにある、SECRET_KEYやDATABASEの情報をGitHub等で公開しないために環境変数に入れて管理したいと思いました。

チュートリアルなどの本番運用を重きを置いていないケースであればそこまで気にしなくていいような話ですが、 AWSを使ったり、本番で運用してみたりとすると良からぬことが起こりえます。

django-environを試してみる

  • 検索したらdjango-environが人気だったのでこちらで設定してみる

github.com

  • dj-database-urlが使われているようで記法などが参考になった

参考

qiita.com

Docker push でdenied: requested access to the resource is deniedが出る

Docker Hubのレポジトリにimageをpushしようとしたらdenied: requested access to the resource is deniedが出てpushできなかった

$ docker push レポジトリ名:タグ名
The push refers to repository [docker.io/レポジトリ名]
23cc12b64d57: Preparing 
f55aa0bd26b8: Preparing 
1d0dfb259f6a: Preparing 
21ec61b65b20: Preparing 
43c67172d1d1: Preparing 
denied: requested access to the resource is denied

試したことや解決結果

  • imagesで確認したら名前がレポジトリ名と行っていた(typo)
  • 以下のissueのようなことを試していた...docker loginし直したり github.com

朝会もくもく会に参加してみた & 渋谷のLightningspotに行ってみた

朝会のもくもく会があったので参加してみた

bellesmorning.connpass.com

良かったこと

  • 無料だった
  • 昼と夜が逆転気味だったので参加して体内時計を調整することができた
    • 今夜ぐっすり眠れるはずだ
  • 朝早くに家を出たら清々しかった
  • 引っ越しばかりなので朝の通勤電車を確認できた
  • もくもく会の場所が広々していて気持ちよかった

懸念するところ

  • 勤務先が近くにないとリピートするには厳しそう
  • カフェでもいいかなと思ってしまった
    • 珈琲や朝食が頼める

その他

  • 場所を上手く使ってビジネスしていると思った
    • 素敵な空間があっても無人で使われてなかったら価値がないからね

渋谷にある安めのコワーキングスペース(Lightningspot)に行ってみた

lightningspot.com

良かったところ

  • 1dayドロップインが1,000円
  • チケットが自動販売機の缶で斬新
  • 比較的に渋谷駅に近い
    • めちゃ近いわけではない
    • 軽い散歩したい人向け
  • 受付の人が親切
    • 無料珈琲のサービスを声がけしてくれる
  • 椅子が高そう

懸念

  • ちょっと狭い
    • 電話や打ち合わせする人が多いので音が気になるかもしれない(自分は気になった)
  • 会員の人が多いので肩身狭い
    • 非会員の定め
  • チケットが自動販売機の缶で斬新すぎて初見殺し

DjangoアプリをHerokuにデプロイする

  • Django Girls Tutorial: Extensionsが終わったのでHerokuにデプロイしてみる

tutorial-extensions.djangogirls.org

目次

  • Django Girls Tutorialを参考に進める
  • herokuはRuby on Rails以来で久しぶりに利用する
    • 前に作ったアカウントあったのでそれでログイン
  • djangogirls.orgのherokuページは情報が古そうだった
    • 途中で簡単なPythonAnywhereを導入してherokuの方はあまり手をつけられてなそう気がする
    • whitenoiseの設定をそのまま書くとエラーが出る

各ファイルの追加や修正

  • requirements.txt
    • 依存パッケージのリストを記述
  • Procfile
    • herokuで使用するアプリケーションのプロセスタイプとエントリポイントを記述
    • Gunicorn1を使用する
    • wsgiのエントリポイントを記述
    • web: gunicorn mysite.wsgi --log-file -
  • runtime.txt
    • herokuで使用するpython version
    • 古いと警告が出るらしい
    • python-3.7.4
  • mysite/local_settings.py
  • mysite/settings.py
  • mysite/wsgi.py

heroku

  • ログイン
  • アプリケーションを名前をつけてcarete
  • git commit後にherokuへpush

web processをstart、databaseをmigrateしたり

$ heroku ps:scale web=1
$ heroku run python manage.py migrate
# 管理画面のsuper userを作成
$ heroku run python manage.py createsuperuser

エラーログの確認

  • URLにアクセスしたがエラーが出ているような画面が表示される
  • herokuのlogを確認してみる
    • リクエストエラーコード503
$ heroku logs --tail
  • 以下問題となりそうなエラー
django.core.exceptions.ImproperlyConfigured: WSGI application 'mysite.wsgi.application' could not be loaded; Error importing module.

Your WhiteNoise configuration is incompatible with WhiteNoise v4.0
This can be fixed by following the upgrade instructions at:
http://whitenoise.evans.io/en/stable/changelog.html#v4-0
  • pipを確認すると入れているのはWhiteNoiseは5.0.1だったのだが…
  • ここでgoogle公式documentで調べたりする
    • WhiteNoise4.0以降から書き方が変更となっているようだ

whitenoiseの記述修正

  • mysite/wsgi.py ファイルの記述が問題のようだ
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
  • settings.pyのMIDDLEWAREに以下を記述する
MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',  #ここに書き足す。
  # ...
]

devcenter.heroku.com

再度deploy

  • Djangoのstaticfiles(静的ファイル/アセットファイル)にもう少し詳しくなろうと思ったのでした
  • Djangoで使用するMiddlewareについても勉強が必要だ

  • PRが作成されていたけど拡張のプロジェクトはあまり動いてないのかな github.com


  1. (Gunicorn は、WSGIアプリケーション用の純粋なPython HTTPサーバー)

PylintでClass ' ' has no 'objects' memberpylint(no-member)が出る

環境

pylintでエラー指摘

  • Django Girls Tutorialをやっている中でviews.pyなどでpylintで指摘を受けて気になった
Class ' ' has no 'objects' memberpylint(no-member)
  • ググるとpylint-djangoをpipでinstallして、vscodeの設定で有効にしてみてという記事をいくつか見つけた
pip install pylint-django

vscodeに設定してみる

  • 設定を開くには[command + ,]
  • python.linting.pylintArgsを検索
  • 項目に--load-plugins = pylint_django追加
  • settings.jsonの場所的には~/Library/Application\ Support/Code/User/settings.jsonにある
"python.linting.pylintArgs": [
    "--load-plugins=pylint_django"
]

しかし、moduleがないと怒られる

No module named "--load-plugins = pylint_django"

anaconda側でpylint-djangoをinstall

  • pipではなくcondaでinstallしてみる
conda install -c conda-forge pylint-django

anaconda.org

エラーは出なくなった

みんなのPython勉強会#53に参加した話

startpython.connpass.com

  • 今回のテーマは初心者向けのようだった

「Stapyユーザーガイド」(30分)

  • 阿久津 剛史(Start Python Club, @akucchan_world)
  • PythonはGlueな言語ですが、Start Python Club(Stapy)はGlueなTechコミュニティです。Pythonプログラミングに留まらず、IoT、AI、ブロックチェーンなど最新の技術のほか、アジャイル開発、組織マネジメントなどの話題もカバーしています。今回はStapyの代表が、コミュニティの上手な使い方を伝授します。

www.slideshare.net

  • はじめに

    • 言語ランキングで上位
      • パッケージで普及されるようになってきた
      • 組み込み系でも使われるようになったきた
    • 同時にコミュニティの人数も増えてきた
    • 及川氏の「ソフトウェア・ファースト」紹介
  • Stapy

    • 「独学プログラマー」の紹介
      • PyCon JP2019にも参加している、youtubeに上がっている
      • プログラミング学習の基本は独学
    • 「独学の技法」の紹介
      • 戦略(どんなテーマを高めるか選ぶ)
      • インプット(本やその他のソース)

www.youtube.com

slideship.com

Python本の著者がPythonの本を読み漁ってみた」(30分)

  • 辻 真吾(Start Python Club @tsjshg )
  • Pythonの本が百花繚乱とも言える状態です。今回は「私と私が知っている人が関係していない」という条件を満たすPythonの本を紹介します。プログラミング教育業界のあの有名人の著書から隠れたおすすめ本まで、きっと自分に合った入門書が見付かるのではないかと思います。また、永遠のテーマでもある「プログラミングに必要な能力は何か?」という問いに対する新たな知見もお話しする予定です。
  • スライド http://www.tsjshg.info/TSUJI_20200116.pdf

  • 3/27~30 国際的なワークショップ(東京医科歯科大学http://datathon-japan.jp/2020/

    • 行きたかったけど申込みが終了している...
  • 「やさしいPython

「初心者って実際誰なの?」(30分)

  • 露木 誠(株式会社ディー・エヌ・エー, @everes)
  • 異業種からIT業界に移り、似たような人の助けに少しでもなればと気がつけば4冊ほど書籍に関わっていました。 今回お声がけをいただいたちょうどそのとき、パーフェクトPythonの改訂作業が大詰めでターゲットと記載内容について担当編集者と悩んでいたという、そんな私が初心者について探ります。

speakerdeck.com

所感

  • 今回2度目の参加だった
  • モチベーションが上がった
  • 懇親会で何人かの人と話すことができた