GitHubじゃ!Pythonじゃ!

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

samuelclay

NewsBlur – NewsBlurは人々を集めて世界を語る個人的なニュースリーダーです。 古い楽器の新しい音

投稿日:

NewsBlurは人々を集めて世界を語る個人的なニュースリーダーです。 古い楽器の新しい音。 http://www.newsblur.com

NewsBlur

特徴

  1. 元のサイトを表示します(あなたはそれを見なければなりません)。
  2. タグ、キーワード、著者などに基づいて読んでいない物語を非表示にします。
  3. 同じ基準に基づいて、読みたいストーリーを強調表示します。

テクノロジー

サーバ側

  • Python 2.7+ :選択した言語。
  • Django :Pythonで書かれたWebフレームワークで、すべてのページを提供していました。
  • CeleryRabbitMQ :RSSフィードの取得と解析に使用される非同期キューイングサーバー。
  • MongoDBPymongo 、& Mongoengine :ストーリーの格納、ストーリーの読み込み、フィード/ページのフェッチの履歴、およびプロキシされたサイトに使用される非リレーショナルデータベース。
  • PostgreSQL :フィード、購読、およびユーザーアカウントの格納に使用されるリレーショナルデータベース。

クライアントサイドとデザイン

  • jQuery :クロスブラウザ準拠のJavaScriptコード。 IEは努力なしで動作します。
  • Underscore.js :JavaScriptの機能プログラミング。 不可欠です。
  • その他のjQueryプラグイン:サイズ変更可能なレイアウトからプログレスバー、ソート可能なアイテム、日付処理、色、コーナー、JSON、アニメーションまですべて。 完全なリストを参照してください

インストール手順

前提条件

安全に無視できるもの

NewsBlurを実行するためには、前提条件のセクションに記載されているすべてのプログラムが必要ではありません。

  • ElasticsearchはJavaを必要とする唯一のモジュールです。 フィードを検索せずに、または記事を検索しなくても、それを無視することができれば、NewsBlurはあなたがログに検索サーバーを持っていないと吐き出すだけです。
  • Jammitは資産圧縮用です。 代わりに、圧縮せずに個々のファイル内のすべてのjsとcssファイルを提供するだけなので、これを使用するのは煩わしいことではありません。 また、nginxは組み込みのnginx設定を使用すると自動的にそれらのファイルをgzipsします。 あなたのlocal_settings.pyにDEBUG_ASSETS = Trueを設定するだけです(これもlocal_settings.py.templateにあります)。
  • サイト全体で使用されている色にnumpyscipyが使用されています。 すべてのサイトのファビコンがその支配的な色について分析され、その色が各サイトにその感じを与えるものです。 あなたはすべての物語すべてでそれを見るでしょう。 私はそれをインストールすることをお勧めします。単にビルドされたパッケージを使うことができ、ソースからインストールする必要はありませんが、これは可能ですが簡単なことではありません。

リレーショナルデータベース(MySQL、PostgreSQL)

インストールを開始する前に、データベースをセットアップする必要があります。 FabricはあなたのためにPostgreSQLとMongoDBの両方をインストールできますが、Ubuntuのみにインストールできます。 Mac OS XユーザーはMySQLまたはPostgreSQLを既にインストールしておきたいでしょう。 MySQLダウンロードしたり、PostgreSQLを ダウンロードしたりすることができます さらに、Mac OS X上で開発マシンとして実行している場合は、 Sequel ProをGUIとして使用することをお勧めします。

MySQLをインストールする場合は、MySQLDBのPythonライブラリも必要です。

sudo easy_install mysql-python

ファブリック

Mac OS XとLinuxの両方でFabricをインストールする必要があります。 依存関係のインストール、サーバーの展開、移行、構成など、多くの一般的な作業はfabfile.pyます。

sudo easy_install fabric

XCode 4を使用したMac OS Xの最近のインストールでは、 ppcアーキテクチャに関する問題が発生する可能性があります。 これを修正するには、次のコマンドを実行します。

sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc \
/Developer/usr/libexec/gcc/darwin
sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gcc/darwin/ppc \
/usr/libexec/gcc/darwin

Symcのリンクは、 ” Mac OSにインストールされていないアーキテクチャのためのアセンブラ “に関するこのStackOverflowの回答から来ています。

MongoDB

MySQL / PostgreSQLの上で、NewsBlurはMongoDBを使用して非リレーショナルデータを格納します。 MongoDBダウンロードしたいと思うでしょう。 あなたがUbuntuにいる場合は、 setup_mongo Fabricコマンドが自動的にこれを行いますが、Mac OS Xでは手動でインストールする必要があります。

ナンシーとサイフィ

インストールするのが一番簡単ではありません。 Mac OS Xを使用している場合、いくつかのオプションがあります:

  • Chris FonnesbeckのSuperpackを使う
  • MacPortsを使う: sudo port install py26-numpy py26-scipy
  • ソースからインストールする(厄介): http ://www.scipy.org/ダウンロード
  • pip、easy_install、 homebrewの組み合わせを使用してください: pip install numpy && brew install gfortran && easy_install scipy

ジャムミット

Jammitを実行するには、Java 7がインストールされている必要があります。

その他の各種パッケージ

リポジトリの内部から次のコマンドを実行します。

pip install -r requirements.txt

パスの設定

fabfile.pyには、2つのパスを設定する必要があります。

  • env.paths.NEWSBLURは、NewsBlurリポジトリへの相対パスです。
  • env.paths.VENDORは、ダウンロードされたすべてのコードがどこに行くべきかを示す相対パスです。

local_settings.pyには、設定が必要ないくつかのパスがあります。 以下のインストール後にこれらを設定します。

Mac OS Xでのインストール

  1. Mac OS Xを開発環境として使用すると、同じシステム上で3つのサーバ(app、db、task)をすべて実行できます。 fabfile.pyを実行するには、 Fabricがインストールされている必要がありfabfile.py また、MySQL / PostgreSQLとMongoDBがすでにインストールされている必要があります。

    fab -R local setup_python
    fab -R local setup_imaging
    fab -R local setup_mongoengine
    fab -R local setup_forked_mongoengine
    fab -R local setup_repo_local_settings
    fab -R local compress_assets
    

    インストールに失敗したパッケージ( lxmlなど)がある場合は、 fabfile.pyを調べ、easy_installプロセスが壊れるのを防ぐために使用できる機能があるかどうかを確認します。 たとえば、lxmlにlibxsltとlibxml2がインストールされている必要があります。 これは、次のFabricコマンドを使用して自動化されます。

    fab -R local setup_libxml_code
    
  2. newsblurユーザとnewsblurデータベースを追加してMySQL / PostgreSQLを設定してnewsblur MySQLの例を次に示します。

    mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/path/to/var/mysql --tmpdir=/tmp
    mysql.server start
    mysql -u root
    > CREATE USER 'newsblur'@'localhost' IDENTIFIED BY '';
    > GRANT ALL PRIVILEGES ON *.* TO 'newsblur'@'localhost' WITH GRANT OPTION;
    > CREATE DATABASE newsblur;
    > exit
    

    空のNewsBlurテーブルをデータベースにロードし、データベースをブートストラップします。

    ./manage.py syncdb --all
    ./manage.py migrate --fake
    ./manage.py migrate
    ./manage.py loaddata config/fixtures/bootstrap.json
    

    syncdb間にユーザーを作成しないと、 bootstrap.jsonファイルはパスワードなしのニュースブラーユーザーを作成します。

  3. mongodbを起動します(まだ実行していない場合)。

    mongod run
    
  4. 開発サーバーを実行します。 この時点で、すべての依存関係をインストールし、追加の構成は必要ありません。 この時点で何かが動作していない場合は、結果をSamuel Clay( samuel@newsblur.com)に電子メールで送信してください。

    ./manage.py runserver
    
  5. 案内する:

     http://localhost:8000/ 
    

    アカウントを作成する。 アカウント作成プロセスの最後に、 https:// localhost / profile / stripe_formにリダイレクトされます 戻るボタンを数回押すと、アプリの中にいます。

Linux / Ubuntuにインストールする

あなたがUbuntuにいる場合は、単にFabricを使ってNewsBlurとその多くのコンポーネントをインストールすることができます。 NewsBlurは、アプリケーションサーバー、dbサーバー、および各種のタスクサーバーの3つの独立したサーバー上で動作するように設計されています。 1台のマシンにすべてをインストールするには、 setup_common手順を繰り返さずにfabfile.pyを読んで3台のサーバーをすべてセットアップします。

インストールの終了

さまざまなシステムをすべて結びつけるために、いくつかのタスクを実行する必要があります。

  1. まず、local_settings.pyをコピーし、OAuthキー、S3キー、データベース名( newsblurないnewsblur )、タスクサーバー/ブローカーアドレス(RabbitMQ)、およびパスを入力します。

    cp local_settings.py.template local_settings.py
    

    あなたが持っているキーを変更するには、local_settings.pyを編集してください。

  2. MySQL / PostgreSQLでnewsblurデータベースを作成する

    MySQL / PostgreSQL

    ./manage.py syncdb
    

アプリサーバー

fab -R local setup_app

データベースサーバー

fab -R local setup_db

タスクサーバー

fab -R local setup_task

NewsBlurの実行を維持する

これらのコマンドはNewsBlurを最新の状態に保ちます。 開発サーバー上では、これらのコマンドを複数回実行する必要はありません。 ただし、定期的にrefresh_feedsコマンドを実行して、テストして読む新しいストーリーがあるようにすることをお勧めします。

フィードの取得

フィードを一度だけ取得したい場合は、 refresh_feeds管理コマンドを使用できます:

./manage.py refresh_feeds --force

特定のユーザーのフィードを取得することもできます。

./manage.py refresh_feeds --user=newsblur --force

フィードバック

フィードバック・テーブルをホームページに取り込むには、 collect_feedback管理コマンドを数分おきに使用します。

./manage.py collect_feedback

統計

統計グラフをホームページに取り込むには、数分ごとにcollect_stats管理コマンドを使用します。

./manage.py collect_stats

ブートストラップ検索

elasticsearchサーバーを実行したら、フィード索引とストーリー索引を使用してブートストラップします。

./manage.py index_feeds

ストーリーは自動的に索引付けされます。

検索サーバーを移動し、検索データベースのすべてを削除する必要がある場合は、MUserSearchテーブルをリセットする必要があります。

>>> from apps.search.models import MUserSearch
>>> MUserSearch.remove_all()

ユニットと統合テストの実行

NewsBlurには、rss_feeds、reader、およびfeed importerの機能をテストするテストスイートが用意されています。 テストスイートを実行するには:

./manage.py test --settings=utils.test-settings

ダウンタイムの場合

電子メールまたはSMSのいずれかを使用してダウンタイムメッセージが表示されます。 これは、何が間違っているかを判断するための操作の順序です。

0a。 ダウンタイムが5分以上かかる場合は、Twitterに行き、あなたがそれを処理していると言います。 NewsBlurのフォロワーは技術的に大変です。 また、502ページではユーザーをステータス更新のためにTwitterに誘導します。

0b。 /etc/hosts secrets-newsblur/configs/hostsインストールされていることを確認して、サーバのホスト名が機能/etc/hostsようにしてください。

  1. それがダウンしていることを確認するにはwww.newsblur.comをチェックしてください。

    あなたが502ページを取得しない場合、NewsBlurに到達することさえできず、あなたはホスティングプロバイダに連絡して彼らに叫ぶ必要があります。

  2. Sentryをチェックして、答えがリストの一番上にあるかどうかを確認します。

    これは、データベース(redis、mongo、postgres)が見つからない場合に表示されます。

  3. HAProxyの統計ページで到達できないサーバーを確認します。 基本認証は、secrets / configs / haproxy.confにあります。

    通常、それはmongoになりますが、redisまたはpostgresのいずれかのサーバーは、神の行為のために到達不能になる可能性があります。 それ以外の場合、頻繁な原因はディスク領域の不足です。 ディスクスペースを監視するモニターがすべてのDBサーバー上にあり、稼働率が低いときに私に電子メールを送信しますが、それでも問題は発生します。

  4. さまざまなデータベースをチェックしてください:

    a。 Redisサーバー(db_redis、db_redis_story、db_redis_pubsub)が接続できない場合、redisはおそらくダウンしています。

    SSH into the offending server (or just check both the `db_redis` and `db_redis_story` servers) and
    check if `redis` is running. You can often `tail -f -n 100 /var/log/redis.log` to find out if
    background saving was being SIG(TERM|INT)'ed. When redis goes down, it's always because it's
    consuming too much memory. That shouldn't happen, so check the [munin
    graphs](http://db_redis/munin/).
    
    Boot it with `sudo /etc/init.d/redis start`.
    

    b。 mongo(db_mongo)が接続できない場合は、mongoがダウンしている可能性があります。

    This is rare and usually signifies hardware failure. SSH into `db_mongo` and check logs with `tail
    -f -n 100 /var/log/mongodb/mongodb.log`. Start mongo with `sudo /etc/init.d/mongodb start` then
    promote the next largest mongodb server. You want to then promote one of the secondaries to
    primary, kill the offending primary machine, and rebuild it (preferably at a higher size). I
    recommend waiting a day to rebuild it so that you get a different machine. Don't forget to lodge a
    support ticket with the hosting provider so they know to check the machine.
    
    If it's the db_mongo_analytics machine, there is no backup nor secondaries of the data (because
    it's ephemeral and used for, you guessed it, analytics). You can easily provision a new mongodb
    server and point to that machine.
    
    If mongo is out of space, which happens, the servers need to be re-synced every 2-3 months to 
    compress the data bloat. Simply `rm -fr /var/lib/mongodb/*` and re-start Mongo. It will re-sync.
    
    If both secondaries are down, then the primary Mongo will go down. You'll need a secondary mongo
    in the sync state at the very least before the primary will accept reads. It shouldn't take long to
    get into that state, but you'll need a mongodb machine setup. You can immediately reuse the 
    non-working secondary if disk space is the only issue.
    

    c。 postgresql(db_pgsql)が接続できない場合、postgresはおそらくダウンしています。

    This is the rarest of the rare and has in fact never happened. Machine failure. If you can salvage
    the db data, move it to another machine. Worst case you have nightly backups in S3. The fabfile.py
    has commands to assist in restoring from backup (the backup file just needs to be local).
    
  5. 新しい/異なるマシンを指す

    a。 fab list_do使用して新しいマシンのIPアドレスを確認します。

    b。 新しいマシンを反映するようにsecrets-newsbur/config/hostsを変更してください。

    c。 新しいhostsファイルを以下のものを持つすべてのマシンにコピーhostsます。

    fab all setup_hosts
    

    d。 変更は瞬時に行われるはずですが、すべてのマシンをバウンスすることもできます:

    fab web deploy:fast=True # fast=True just kill -9's processes.
    fab task celery
    

    e。 utils/tlnb.pyutils/tlnbt.pyを読んで多くの読み込みとフィードの取得をutils/tlnbt.pyします。

  6. フィードが取得されない場合は、 tasked_feedsキューが空であることを確認します。 以下を実行して排水することができます:

```
Feed.drain_task_feeds()
```

This happens when a deploy on the task servers hits faults and the task servers lose their 
connection without giving the tasked feeds back to the queue. Feeds that fall through this 
crack are automatically fixed after 24 hours, but if many feeds fall through due to a bad 
deploy or electrical failure, you'll want to accelerate that check by just draining the 
tasked feeds pool, adding those feeds back into the queue. This command is idempotent.

著者

ライセンス

NewsBlurはMITライセンスの下でライセンスされています。 (ライセンスを参照)







-samuelclay

執筆者: