2016-04-13 10 views
0

私はここで完全に狂っています。私はPython Flask frameworkを使ってウェブサイトを開発しています。そして、午後から私のLinuxボックスは狂った人のように行動しています。私に説明させてください。終了したプログラム(Flask)は出力をSTDOUTに送信し続けますか?

私はFlaskのウェブサイトをUbuntu 14.04サーバーに持っています。私は通常、virtualenvを使ってファイル./run.pyを使って実行します。今日私はいくつかのパッケージをインストールし、最終的にはきれいな環境をもう一度望んでいたと決めました。これは予想通り、すべてのほとんどである

$ virtualenv venv 
$ . venv/bin/activate 
(venv) $ pip install -r requirements.txt 
# EVERYTHING INSTALLS WITHOUT ERRORS 
(venv) $ ./run.py 
/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:100: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. 
    InsecurePlatformWarning 
* Running on http://0.0.0.0:5000/ 
* Restarting with inotify reloader 
* Debugger is active! 
* Debugger pin code: 219-856-383 
/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:100: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. 
    InsecurePlatformWarning 

:前に百万回を行ったように、だから、私はvenvフォルダを削除して、もう一度それを作成しました。私は私のブラウザに行き、私のウェブサイトをロードします(私は何百万回も前と同じように)。ブラウザは非常に長い時間をロードしますが、何もロードされません。ブラウザコンソールでは、私は接続が全く開いていないと見ています。

次に、端末を確認して何も起こっていないことを確認します。だから私は(予想通り)CTRL + Cを使用してのdevのサーバーを停止し、次のような出力が得られます。

^CException in thread Thread-6: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/watchdog/observers/inotify_buffer.py", line 59, in run 
    inotify_events = self._inotify.read_events() 
    File "/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/watchdog/observers/inotify_c.py", line 296, in read_events 
    event_buffer = os.read(self._inotify_fd, event_buffer_size) 
KeyboardInterrupt 

だから私は開いているすべてのネットワーク接続をチェックアウト:

$ netstat -tulpn 
(Not all processes could be identified, non-owned process info 
will not be shown, you would have to be root to see it all.) 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp  0  0 127.0.0.1:6379   0.0.0.0:*    LISTEN  - 
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  - 
tcp  0  0 0.0.0.0:5000   0.0.0.0:*    LISTEN  6127/python 
tcp  0  0 127.0.0.1:27017   0.0.0.0:*    LISTEN  - 
tcp  0  0 127.0.0.1:3306   0.0.0.0:*    LISTEN  - 
tcp6  0  0 :::22     :::*     LISTEN  - 
udp  0  0 0.0.0.0:68    0.0.0.0:*       - 
udp  0  0 0.0.0.0:24675   0.0.0.0:*       - 
udp6  0  0 :::22996    :::*        - 

だから私はに決定しますkill 6127を使用してポート5000上のPythonプロセスを終了します。その後、何が起きるのかがわかりません。コマンドは「受け入れられた」を取得(私はエラーを取得していない)、その後私は、ブラウザが突然ウェブサイトをロードし、端末は、ログの出力を開始参照してください。

(venv) $ kill 6127 
(venv) $ 83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.045281 
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.062855 
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.080915 
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.099523 
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.118382 
83.161.103.21 - - [2016-04-13 13:59:45] "GET /bower/bootstrap/dist/css/bootstrap.min.css?version=3.3.5 HTTP/1.1" 304 745 0.006047 
83.161.103.21 - - [2016-04-13 13:59:45] "GET /bower/font-awesome/css/font-awesome.min.css?version=1448904482.0 HTTP/1.1" 304 745 0.003684 
etc. etc. 

そしてここから、私は何かを理解していません。私は、私がCTRL + Cを使用してdev-serverを停止し、その間に2つのコマンド(netstat -tulpnkill 6127)を実行したと思っても、出力を取得します。

私は再び私に私のスタートラインを取得した、カップルの時間を入力し、任意のコマンドを実行して打つことができます。

(venv) $ 
(venv) $ 
(venv) $ pwd 
/home/kramer65/mysite 
(venv) $ 

と私は、ブラウザでWebサイトをリロードしたときに、私は単純に再び出力を得ます同じ端末ウィンドウ。私のコマンド、私のコマンドの出力、Flask dev-serverのログはすべて同じターミナルウィンドウに出力されます。

私はすべてのウェブサイトのコードを完全に削除し、virtualenvをもう一度削除してインストールすると、新しいユーザーを作成してそこにすべてをインストールしましたが、同じ結果が何度も繰り返されます。

私はこの結果を得る理由は分かりません。 Flaskのために、virtualenvのために、bashや他の何かのために、ネットワークの不思議なバグのためですか?

そして、最も重要なことは、私はこれをどのように解決できるか考えていません。誰も考えていますか?私はここに私の髪を引っ張っていますので、すべてのヒントは、歓迎されている。..

[EDIT]次の結果と私は$ ps -eaf | grep pythonを走った

、:

​​
+0

ps -eaf |を実行すると、 grep pythonはnetstatの出力とは別に何かを表示していますか? – lapinkoira

+0

@ lapinkoira - 本当に興味深いものはありません。私は質問の最後に結果を追加しました。何か案が? – kramer65

+0

run.pyコードを確認する必要があります – lapinkoira

答えて

0

さて、あまりにものためのいじりの後私は長い間、この問題を発見しました。私はすでにFlask dev-serverと何か関係があると思っていましたが、これはコード変更時に新しいプロセスを起動することができます。その間、私はノートパソコンからLinux dev-serverにコードを同期させるためにrequirements.txtにwatchdogを追加しました。

Flaskデベロッパーによってinotifyを使用するとウォッチドッグがうまくいきません。サーバーからウォッチドッグを削除した後、すべて正常に動作します。

これは将来誰かに役立つことを願っています。いずれにしても:美しい一日を!

+0

inotify reloader *はウォッチドッグであり、はるかに効率的です。これはおそらく、プロジェクトとは別の問題か、報告すべきバグですが、「ウォッチドッグを削除する」ことを推奨することは間違いなく良いことです。 – davidism

+0

@ダビデミズム - うーん、良い点。問題は、Flaskの問題を引き起こした別のバージョンのWatchdogを手動でインストールしたことに起因する可能性があります。問題を最小限のFlaskアプリケーションに分離しようとし、後でFlask githubページの問題として報告します。 – kramer65

関連する問題