Github: https://github.com/nyaadevs/nyaa
NyaaV2
開発のためのセットアップ
このプロジェクトはPython 3.6を使用しています。 3.5には存在しない機能が使用されているので、必ずPython 3.6を使用してください。
このガイドでは、1)Linuxを使用しており、2)コマンドラインでいくらか能力があると仮定します。
Windows上でNyaaを実行することは不可能ではありませんが、このガイドではそれに焦点を当てていません。
コード品質:
- もっと深くする前に、PEP8スタイルのガイドラインに従ってください。警告/問題のリストを見る前に
./dev.py lint
を実行してください。-
./dev.py fix && ./dev.py isort
を使用して、前のコマンドで報告された問題の一部を自動的に修正することもできます。
-
- PEP8以外にも、コードをきれいにして理解しやすいようにしてください。 それは丁寧です!
テストの実行
tests
フォルダには、 nyaa
モジュールとwebserverのテストが含まれています。 テストを実行するには:
- あなたがpython仮想環境にいることを確認してください。
- リポジトリディレクトリの中で
./dev.py test
を実行します。
Pyenvのセットアップ
pyenvは異なるPythonバージョンの使用を容易にします。すべてのLinuxディストリビューションが3.6パッケージを提供するわけではないので、それは私たちの路地です。
- 依存関係をインストールするhttps://github.com/pyenv/pyenv/wiki/Common-build-problems
-
pyenv
https://github.com/pyenv/pyenv/blob/master/README.md#installationをインストールします。 -
pyenv-virtualenv
https://github.com/pyenv/pyenv-virtualenv/blob/master/README.mdをインストールします。 -
pyenv
Python 3.6.1をインストールし、プロジェクトのvirtualenvを作成します。-
pyenv install 3.6.1
-
pyenv virtualenv 3.6.1 nyaa
-
pyenv activate nyaa
-
-
pip install -r requirements.txt
使って依存関係をpip install -r requirements.txt
-
config.example.py
をconfig.py
コピーする- ホストするインスタンスに応じて
config.py
SITE_FLAVOR
を変更してください
- ホストするインスタンスに応じて
MySQL / MariaDBデータベースの設定
あなたは SQLiteを使うかもしれませんが 、このプロジェクトの現在のサポートは古く、むしろサポートされていません。
- config.pyで
USE_MYSQL
フラグを有効にする - 以下の手順で最新のmariadbをインストールしてください。https: //downloads.mariadb.org/mariadb/repositories/
- テスト済みのバージョン:
mysql Ver 15.1 Distrib 10.0.30-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
- テスト済みのバージョン:
- root dbユーザとしてログインした次のコマンドを実行します(必要に応じて、自分の
config.py
値の代わりに使用します)。-
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123';
-
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost';
-
FLUSH PRIVILEGES;
-
CREATE DATABASE nyaav2 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
-
仕上げ
-
python db_create.py
を実行してデータベースを作成し、カテゴリをインポートする-
db_create.py
のアドバイスに従って、../db_migrate.py stamp head
を実行して、Alembicのデータベースバージョンをマークしてください
-
-
python run.py
devサーバを起動する - あなたが開発を終えたら、
pyenv deactivate
またはsource deactivate
をpyenv deactivate
てvirtualenvを無効にします(またはシェルセッションを閉じるだけです)
あなたは今、簡単なテストと開発の準備が整いました!
以下では、データベースの移行と高度な検索エンジンElasticsearchの有効化について説明します。
データベースの移行
- データベースの移行は、 AlembicのラッパーであるMigrateによって行われます。
- 誰かがデータベーススキーマを変更し、新しい移行スクリプトを含む場合:
- データベースがAlembicによってマークされたことがない場合(移行前のデータベースを使用している場合)は、新しい移行スクリプトを
./db_migrate.py stamp head
前に./db_migrate.py stamp head
実行して./db_migrate.py stamp head
。- すでに新しいスクリプトがある場合は、代わりに
./db_migrate.py history
の出力をチェックして、現在のデータベース状態に一致するハッシュを選択し、../db_migrate.py stamp <hash>
実行します。
- すでに新しいスクリプトがある場合は、代わりに
- あなたのブランチを更新してください(例えば、
git fetch && git rebase origin/master
) - 移行を実行するには、.
./db_migrate.py upgrade head
を実行します。 完了!
- データベースがAlembicによってマークされたことがない場合(移行前のデータベースを使用している場合)は、新しい移行スクリプトを
- データベース・スキーマを変更した場合は、次のようにします。
- 変更を
models.py
保存し、データベーススキーマが以前のバージョンと一致するようにします(つまり、新しいテーブル/カラムはライブデータベースに追加されません) -
./db_migrate.py migrate -m "Short description of changes"
を実行して、変更のための移行スクリプトを自動的に生成します。- スクリプト(
migrations/versions/...
)を確認して、動作することを確認してください! Alembicはすべての変更を認識できない場合があります。
- スクリプト(
-
./db_migrate.py upgrade
を実行して移行を実行し、アップグレードが機能することを確認します。- (
./db_migrate.py downgrade
を実行して./db_migrate.py downgrade
を確認し、再度アップグレードしてください)
- (
- 変更を
弾性検索の設定と有効化
弾性検索をインストールする
-
sudo apt-get install openjdk-8-jdk
使ってJDKをインストールsudo apt-get install openjdk-8-jdk
- 弾性検索をインストールする
- パッケージから…
- サービスを有効にする:
-
sudo systemctl enable elasticsearch.service
-
sudo systemctl start elasticsearch.service
-
- サービスを有効にする:
- ESを永久にインストールしたくない場合は、単にアーカイブを抽出してファイルを実行してください
- パッケージから…
-
curl -XGET 'localhost:9200'
を実行し、ESが動作していることを確認してください- オプション:KibanaをESの検索デバッグフロントエンドとしてインストールする
ESの設定
-
./create_es.sh
を実行してトレントのインデックスを作成します:nyaa
とsukebei
- 出力は
acknowledged: true
2回
- 出力は
- Nyaaアプリを停止していない場合は停止します
-
python import_to_es.py
を実行して、すべてのトレント(nyaaとsukebei)をESインデックスにインポートします。- データベースに豊富なトレントがある場合、これには時間がかかることがあります。
config.py
USE_ELASTIC_SEARCH
フラグを有効にし、アプリケーションを(再)起動します。
Elasticsearchが機能するはずです! 現在の設定でESインデックスが「ライブ」に更新されることはありませんが、ElasticsearchをMySQLのbinlogまでフックする方法については、以下で説明します。
ただし、簡単なESのテストと開発にはbinglogは必要ないことに注意してください。 import_to_es.py
を実行して、すべてのトレントをimport_to_es.py
することができます。
MySQLのBinloggingの有効化
- MariaDB / MySQLサーバの設定を編集し、
[mariadb]
下に以下を追加して[mariadb]
:log-bin server_id=1 log-basename=master1 binlog-format=row
- MariaDB / MySQLを再起動する(
sudo service mysql restart
) - 設定例(
es_sync_config.example.json
)をes_sync_config.json
としてコピーし、オプションを好みに合わせて調整します(接続オプションを確認してください)。 - rootとしてmysqlに接続する
-
SHOW VARIABLES LIKE 'binlog_format';
の結果がSHOW VARIABLES LIKE 'binlog_format';
ことを確認してSHOW VARIABLES LIKE 'binlog_format';
ROW
-
GRANT REPLICATION SLAVE ON *.* TO 'username'@'localhost';
設定されたユーザーがbinlogにアクセスできるようにする
-
sync_es.pyの設定
sync_es.py
は、 sync_es.py
を読み込んで変更をESインデックスにプッシュすることで、Elasticsearchインデックスを更新したままにします。
-
REPLICATION
権限を与えたユーザーでes_sync_config.json
が設定されていることを確認してください -
import_to_es.py
を実行し、出力されたJSONをsave_loc
で指定されたファイルにコピーします -
sync_es.py
そのまま実行するか 、実際の配備のためにサービスとして設定して実行します。システム/ rootとして実行することが好ましい-
sync_es.py
が適切な依存関係でvenv内で実行されていることを確認してください!
-
あなたは終わった! スクリプトはデータベースからElasticsearchに更新情報を提供するはずです。
ただし、指定されたESインデックスのリフレッシュ間隔は30秒であり、ローカル開発では長時間かかるように感じることがあります。 それを調整するか、 Elasticsearchを自分で突き刺しても構いません!