Django-nonrel Google App Engine Pythonウェブサイト

この記事では、プロジェクト( egaxegax.appspot.com)の開発について少しお話したいと思います。



私はPython言語の大ファンなので、人気のあるDjangoフレームワークでサイトを作成することにしました。 無料のホスティングappspot.comで使用するには、 djangoのNoSQLバージョンとGoogle App Engineプラットフォームを使用するようにコードを調整しました。





このサイトは12年目から存在しています。 djangoappengineの機能をライブで探索するためのプラットフォームとして使用します。 また、 Google Webmastersで検索インデックス、クエリなどの統計を調べることも興味深いです。 たとえば、私は、Googleがメタタグのコンテンツではなく、タイトル見出しを検索用にインデックス付けすることを発見しました。



それはすべて記事セクションから始まりました-ソフトウェアのトピックに関する小さなメモ:スクリプト、設定、使用例。 しかし、記事はすぐに終わりました。 ただし、大量に新しいものを作成しても機能しません。 さらに何かが必要でした。



ウェブのどこかで、歌詞と曲のコードを含むファイルのアーカイブをダウンロードしました。 彼らに彼のリバウンドの数十を追加し、サイトにすべてを置くことにしました。 合計で、約25,000のファイルが取得されました。 手動ではあまりロードしません。 これを行うために、テーブルファイルをGAE DataStoreにロードするためにテキストファイルをダンプに変換するsong_conv.batスクリプトを作成しました。



DataStoreでの1日あたりの書き込み操作の数に制限があるため、データのロードはいくつかの段階に分割する必要がありました。 1日あたり約700〜800レコード(ファイル)を記録することが判明しました。



このようにして、テキストの最初の部分に約11,000ファイル(DataStoreのレコード)のオブジェクトをロードしました。 その後、 song_upload.pyスクリプトを作成して、HTTPプロトコルを使用したPOSTリクエストでデータをダウンロードしました。 したがって、入力フォームのフィールドへの入力をシミュレートし、同じコントローラーを介して処理が行われます。 データのダウンロード速度は低下しましたが、データ挿入をローカルでデバッグできます。



しばらくしてからデータをダウンロードした後、サイトのページを開くと、エラー503 Server Error:Over Quotaがより頻繁に表示されるようになりました。 サーバー上のログを調べたところ、私のサイトの主なユーザーはgooglebotとyandexbotであり、2〜3分間隔でページにアクセスしていることがわかりました。 このエラーは、データストアから読み取るための1日あたりの操作数の制限を超えたために発生します。



appengineのドキュメントと例を見て、キャッシュモジュール(つまりmemcache)をまったく使用していないことに気付きました。 ページを開くたびに、QuerySetを介したデータベース呼び出しが発生しました。 新しいスキームでは、サンプルの結果をQuerySetレコードからディクショナリリストに転送します。ディクショナリリストはキャッシュに格納され、アクセスが繰り返されるとそこから読み取られます。 これにより、読み取り制限がすぐになくなる問題が解決されました。



その後、 写真ニュースのセクションを追加しました。 セクションは、個別のアプリケーション(アプリ)として設計されています。 データはDataStoreテーブルに保存されます。 写真セクションでは、BlobStoreファイルストレージも使用します。 すべてのアプリケーションは、データをフェッチするときにキャッシュを使用します。



Chordsセクションとの類推により、 Booksセクションに記入し、そこで電子書籍のテキストを広めます。 / media / scriptsディレクトリからbook_conv_up.pyスクリプトを使用して* .epubファイルを解凍することにより、書籍のテキストを取得します。 歌詞とは異なり、ボリュームは非常に大きく、ページに完全に表示することはできません。 また、キャッシュメモリの制限を超えたため、書籍全体をキャッシュに追加できないという問題がありました。 これを行うために、私は読んで、キャッシュに入れて、それらを章に表示します。



写真本のセクションを埋めるために、歌詞を埋めるためだけでなく、スクリプトphoto_upload.pybook_upload.pyを書きました。



このサイトには、Djangoに組み込まれたユーザー認証があり、Captchaによる検証を使用して新しい認証が追加されています。



GitHubリポジトリdjango-egaxegaxのプロジェクトページにアクセスしてください。



All Articles