RailsでHerokuのPostgreSQLからConohaのMariaDBデータベースサーバーに移行する方法

RailsでHerokuのデータベースであるPostgreSQL( Heroku Postgres)からConohaのMariaDBデータベースサーバーに移行する方法です。

ソングストーリー(https://www.songstory.me/)のデータベース数が1万行近くになり、移行が必要になりました。

今回はConoHaのMariaDB(月550円税込み)に移行したいと思います。
理由は、検討した中で一番安いからです。
データベースサーバーを1つ持っていれば違うサービスでも使えます。

基本料金月額500円/10GB。10GBあればテキストデータなら十分すぎると言えるでしょう。

(画像データや動画データは通常はオブジェクトストレージという専用のサーバーに入れます)

ということで、まず必要なのはバックアップです。

Heroku PostgresにHeidiSQLというデータベース接続ツールでアクセスします。
「HeidiSQL」
https://forest.watch.impress.co.jp/library/software/heidisql/

これは使った中では一番使いやすい無料のデータベース管理ソフトです。
ごく稀に固まりますがそこはご愛嬌。

さて、今回は
PostgreSQLからMySQL(MariaDB)への移行なのですが、ここで注意が必要です。 続きを読む

Pythonのバージョン管理をPipenvにした話。Windows10ではPipenvがベストプラクティスな気がする。

どうも、りーずです。

・Windows10でのPythonのバージョン管理はPipenvが良い
・Pipenvを使えるようにする手順
・Pipenvの使い方
・requirements.txtを作成する
・requirements.txtから仮想環境をpipenvで作る
・仮想環境を有効にしようとすると「このシステムではスクリプトの実行が無効になっているため、ファイル ~.venv\Scripts\activate.ps1 を読み込むことができません。」と出る場合
・まとめ

このような構成でお届けします。Pipenvは良いよ!というメモです。

pip install pipenv
pip list
pipenv --python 3.6
.venv/Scripts/activate
deactivate
pipenv install django==2.2
django-admin startproject プロジェクト名
django-admin startapp アプリ名
python manage.py runserver
pipenv lock -r > requirements.txt

今回実際に使うのは上記のコマンドです。


・Windows10でのPythonのバージョン管理はPipenvが良い

Windows10環境のPythonのバージョン管理でAnacondaを使ったり、Virtualenvを使ったり、素のPythonでpipを使っていたりしたのですが、最近はPipenvDjangoなどの開発には向いているのではないかと思うようになりました。その理由を述べていきます。

最初はWindows10でAnacondaを使おうとしたのですが、使いたいライブラリがなかなか動かせなかったり、インストールの設定でどれがベストなのかが分かりにくかったり、pipコマンドと混ぜると良くない(?)などの情報があり、使わなくなりました。
一言でいうと初心者には難しいです。

その後、Udemyや海外のYouTubeのPythonの英語の動画を見ているとよく使われているvirtualenvを使っていました。

しかしvirtualenvはPythonのバージョンを切り替えられないという欠点がありました。
(Python3.6、3.7、3.8などを切り替えられない。)

そこで色々と調べた結果、Pipenvを使うと
・Pythonのバージョンそのものも管理(切り替え)が出来る
・個々のフォルダ内で環境を作り、アクティベートするとそのまま設定したものが使える

というように、やりたいことが出来る唯一のバージョン管理ツールでした。
これには非常に利便性を感じたので、Djangoなどのアプリケーションを作ったり、ちょっとしたプログラミングをするにはPipenvでいいかな、という結論になりました。

僕はAnacondaとの共存は諦め、とりあえずPipenvのみでやっていこうと思いました。

これらのツイートで貼っているリンクが参考にしたものです。


・Pipenvを使えるようにする手順

まず、使いたいPythonは、公式からダウンロードしてインストールしておきます。(重要)

Python3.8を使いたければそれをダウンロードしてインストール、Python3.7を使いたければそれをダウンロードしてインストール、という感じです。

Pythonのインストール先ですが、

C:\Python
というフォルダを作り、そこに 続きを読む

Windows10でコマンドプロンプトのPythonコマンドのバージョンを切り変える方法(3.6と3.8を切り替え等)。環境変数の2つの値を上に持っていこう。上にある環境変数のバージョンが優先されます。

どうも、りーずです。

・Python3.6を機械学習用に、
・Python3.8はDjango用に、

など、複数のPythonのバージョンを切り替えたいときがありました。

しかし、コマンドプロンプトにおけるPythonコマンドの複数バージョンの切り替え方法の良い情報がなかなか検索で出てこない。

ということで色々自分で試した結果、切り替える方法を見つけたのでシェアします。

結論から言うと、
環境変数の設定で

C:¥Python¥Python385¥Scripts¥
C:¥Python¥Python385¥

というように、設定したいPythonのバージョン(この場合はPython3.85)の環境変数を一番上に持っていくと、
コマンドプロンプトでPythonコマンドを発動するときに、そのPythonのバージョンが優先されます。

Pythonの環境変数は下記のように2つ必要です。
[インストール場所]¥Scripts¥
[インストール場所]¥

環境変数の設定には「上へ」「下へ」などのボタンがあるので、意外と簡単に切り替えが可能です。

使わないPythonのバージョンは下にあれば読み込まれないので大丈夫です。

以下で詳細に解説。


Pythonはインストーラーでインストールします。
パスはどれも通す設定にします。

ちなみにPythonのダウンロード先は

この動画を参考に、
Python3.67の場合は
C:¥Python¥Python367

Python3.85の場合は
C:¥Python¥Python385

のようにして場所を指定しました。
32bit版の場合はうしろに -32 と付けると分かりやすいと思います。

例:
C:¥Python¥Python385-32

なぜこれが良いかというと、virtualenvを使うときに、

この動画のように、たとえば
C:¥Program Files¥Python367
にPythonをインストールしていたとして、仮想環境を作ろうと

virtualenv -p C:\Program Files\Python367\python.exe py36_env

のようにすると、「C:\Program Filesの場所が読み込めない」というようなエラーが出たからです。
(この場合はPython3.67をインストールした場所を参照して、
仮想環境を「py36_env」という名前で作るコマンドです)

このとき僕は、『C:\Program Files』にPythonをインストールしていました。

「Program FilesのmとFの間にスペースがあったからエラーが出たのかな?」と思いました。
いずれにせよ、パスにスペースが含まれているのは好ましくないです。

(通常のインストールなら C:¥Program Files はデフォルトの場所ではないので大丈夫だと思います。この C:¥Program Files は過去に僕が設定した場所です。)

なので、
C:¥Python

というふうに、文字が少なく済み、エラーが出なさそうな場所にPythonのバージョン番号を割り当てて、それぞれのPythonをインストールすることにしました。

例えばPython3.67なら

C:¥Python¥Python367

のような具合です。

本題:環境設定の設定をする

さて、肝心の環境変数の話ですが、
Windows10のタスクバー右下にある >> という小さいマークをクリックし、
「コントロールパネル」から「システム」
システムの左上あたりにある「システムの詳細設定」をクリックし、

この画面を出します。

この画面の「環境変数」をクリックして、編集することが可能です。

「すべてのユーザーにPythonをインストール」設定にしている場合は
システム環境変数の「Path」を変更します。

以下のような画面になります。

ここでは上の画面で
Python3.85の環境変数が2つ、
Python3.67の環境変数が2つあるのが分かるかと思います。

コマンドプロンプトで使いたいPythonのバージョンを3.85にしたい場合は、
上の画面のように、Python3.85の環境設定2つ

[インストール場所]¥Scripts¥
[インストール場所]¥

の2つの環境変数を一番上(他のPythonの環境変数より上)に持って行きましょう。

そうしたら「OK」を押して、システムのプロパティも「OK」を押して、一度すべてのウィンドウを閉じましょう。

さらに、コマンドプロンプトを立ち上げているときは一度閉じて、また立ち上げます。

そうして、

python --version
と打つと、先程設定したPythonのバージョンになっていると思いますのでお試し下さい。

ちなみに

py -3.6
などpyコマンドによってPythonのバージョンを切り替えることは可能ですが、
今回はpythonコマンドに割り振られるPythonのバージョンの切り替えを説明したものになります。

以上、何かの参考になれば幸いです。


※何か間違っている事などございましたら
Twitter @so_meru までご教示いただけると大変助かります。

DjangoでオープンソースのECサイトを作る方法。Saleor(https://saleor.io)やOscar(django-oscar)を使ってみよう。

DjangoでECサイト作りをしたいと考えていたところに、YouTubeで良さげな動画を見つけました。

「Python Django e-Commerce Tutorial 2020 – for Beginners」

とても簡潔に説明がされています。
ローカル環境で動くところまで。

上の動画のECサイトの実装ではSaleorhttps://saleor.io/)というDjangoのライブラリを使っています。

デモサイト:
https://demo.saleor.io/

デモサイト管理画面
https://pwa.saleor.io/dashboard/

このライブラリはオープンソースですが、サーバーをSaleorの用意するクラウドで動かしたい場合は別途月々の料金が必要なようです。スタンダードプランで月に約7万6千円ほど(695ドル/月)。ちょっと高すぎる。
ただ、個人で普通に使いたいだけならフリープラン(自分でサーバーなどを用意する)でいけそうです。
フリープランでもカスタマイズや商用利用が可能です。

Djangoは最初からログイン/ログアウト(認証)やアクセス制限などの
「管理権限系の処理」と、その管理画面が実装されているので、
Djangoを入れるだけでユーザーとスーパーユーザー(管理人)を分けて処理を行うことなどが出来ます。

(ちなみに上記デモサイトでも分かるようにSaleorでは管理画面はDjangoの管理画面ではなくSaleorの管理画面が用意されています。)

___________________
※2020年10月追記
:アクセスが増えていたので追記です。
Saleorを実際に使ってみたところ、最新バージョンではDocker(仮想コンテナ)が必須になっていました。Dockerの知識が必要です。ご注意ください。
_______(追記おわり)_____

また、ちょっと調べてみたところ、Saleorとは別に、Oscar(https://github.com/django-oscar/django-oscar)というEコマースのライブラリもあるようです。

『コピペで始めるDjango Oscor – Qiita』
https://qiita.com/shinriyo/items/a59412f4569171e41606

『django oscar 簡易チュートリアル – Qiita』
https://qiita.com/d0d0npa/items/4a4cc9914feebf60bbc0

Cartridgeというライブラリも発見。
https://github.com/stephenmcd/cartridge

このようなストア系のライブラリがあれば、車輪の再発明のような事をしなくても良いのですね。
選択肢が広がります。


話は別ですが、個人的には2020年5月現在でオリジナルのECサイトを作る一番簡単な方法は、WordPressにWooCommerceのプラグインを入れてStripe決済にすることだと思います。
Stripeは維持費なし、手数料が販売金額の3.6%のみ。凄いのは振込手数料も0円です。

限定公開URLやパスワードをつけることが出来るのでかなり良いです。
海外から作曲の依頼があったときにデータの受け渡しやライセンスの販売に使えます。
購入後のダウンロード期限(日数)の設定まで出来ます。
ゲスト購入(アカウントを作らずにE-Mailのみでの購入)も可能。

※ちなみに、レンタルサーバーで運用する場合は「国外IPアドレスフィルタ」の「アクセス制限設定」を無効にして国外のウェブアクセスを許可しないと、購入後にユーザーに提供するダウンロードリンクが利かないので、海外販売を視野に入れる場合はこの設定は無効にしましょう。

ただ、これだと商品表示の方法や音楽プレイヤーの表示・仕様の自由なカスタマイズなど、自分の思っているような事が微妙に出来ないんですよね。

ということで色々調べています。


・Djangoで1からECサイトを作る方法

あとは、YouTuberのDennis Ivyという人がDjango + PayPalのECサイトの作り方を解説している動画があります。この人の英語はとても聞き取りやすく明瞭なのでオススメです。

Code With Steps
https://codewithsteps.herokuapp.com/

上記サイトで、これらの動画に沿いながらコードを実装できるように丁寧に説明しています。
(サイトの方は有料。買い切りです。12.49ドルでした。)

Djangoでのショッピングカート実装の仕組みなどを学ぶには十分すぎる内容だと思います。

僕はこのサイトで勉強中です。Bootstrapのバージョンだけ4なので注意ですね。
(2021年5月5日にBootstrap5が発表されたので若干古くなってしまいました。)


以上、メモ用に書き残しておきます。

英語のニュースで出てくるちょっと難しい単語・語句一覧(個人学習用)

どうも、りーずです。

英語学習のために、英語のニュースをラジオで聞けるようなサイトを探していました。
そこで見かけたツイートがこちら。

NPR National Public Radio
https://www.npr.org/

主に募金や寄付金で成り立っているニュースメディアです。
米国の非営利・公共のラジオネットワーク。

音声コンテンツが驚くほど充実しています。
毎時のニュースやモーニングエディションという朝のニュースのまとめ等があります。

スマホのアプリで使ったほうがラジオが聞きやすいです。
こちらはiOS用アプリ。
https://apps.apple.com/jp/app/npr/id324906251

アプリでニュースを聞きながら、分からない単語をスマホのブラウザ検索でどんどん調べていくと語彙が増えていきます。

 

ということで、このようなニュースサイトで学習した単語を羅列していきます。
多分逐次更新。


英語のニュースで出てくるちょっと難しい単語・語句一覧

・never beforeバー ビォー)
成句:今までになかった

・Recessions
(リッションズ)
名詞:不況、不景気、景気後退

・senate
ネット)
名詞:上院
ちなみに下院は「the Lower House」「the House of Representatives(アメリカの場合)」
などと言うらしい。

・exacerbate(イグーサベイト)
動詞:(状況を)悪化させる

・mereーァ)
形容詞:たったの、単なる、ほんの

・fabulousファビュラス)
形容詞:素晴らしい

・signatureィグニチュアー)
名詞:署名、サイン

・figure out
成句:考えて理解する、考えて答えを見つける

・so to speak
成句:いわば、言ってみれば

・deficitフィスィット)
名詞:赤字額、不足額、損失

・reiterate(リーダレイト)
動詞:繰り返し言う

・conservation(コンサィション)
名詞:保存、保護

・convention(コンンション)
名詞:会議、(政治)党大会、集会、
慣習、約束事

・come under
複合動詞:(管理・支配などの)下に入る、~の部類に入る、

・come under criticism
成句:批判される

・in need
成句:必要としている、不足している

・kludgy(クルージー、クラジィ)
形容詞:ずさんな

・in person
成句:直接、自分自身で

・contractントラクト)
名詞:契約
動詞:契約を結ぶ

・conducting(カンクティング)
名詞:実施、行為、(音楽の)指揮

・urgencyアージャンスィー)
名詞:緊急

・lingerンガー)
動詞:残る、とどまる


・counsel
ウンセル)
名詞:顧問、弁護士、
例:national security counsel → 国家安全保障顧問

counselは「~顧問」という意味で出てくる場合が多いと思います。

・boonーン)
名詞:たまもの、恩恵
形容詞:愉快な

・to this end
成句:この目標を達成するために

・get through
成句:(困難を)切り抜ける、通り抜ける

・quarantine(クォーランティーン)
名詞:隔離、検疫

・roundupウンドアップ)
名詞:概要、まとめ、総括

・investigate(インスティゲイト)
動詞:調査する、取り調べる

・investigation(インベスティイション)
名詞:取り調べ、調査、捜査

・testifyスティファイ)
動詞:証言する、証明する

・testimonyスティモニー)
名詞:(法廷での)証言、証明

・commence(コンス)
動詞:(~を)開始する、し始める、
(自動詞)始まる

・overwhelmingly(オーバーウェルミングリー)
副詞:圧倒的に

・overwhelming(オーバーウェルミング)
形容詞:圧倒的な

・prosecutor(プセキューター)
名詞:検察官、検事

・dictatorディクテイター) 続きを読む