GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

nyaadevs

nyaa – 猫用Bittorrentソフトウェア

投稿日:

猫用Bittorrentソフトウェア

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パッケージを提供するわけではないので、それは私たちの路地です。

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 deactivatepyenv 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を実行します。 完了!
  • データベース・スキーマを変更した場合は、次のようにします。
    • 変更を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
  • 弾性検索をインストールする
  • curl -XGET 'localhost:9200'を実行し、ESが動作していることを確認してください
    • オプション:KibanaをESの検索デバッグフロントエンドとしてインストールする

ESの設定

  • ./create_es.shを実行してトレントのインデックスを作成します: nyaasukebei
    • 出力は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を自分で突き刺しても構いません!







-nyaadevs
-, , , , , , ,

執筆者: