2014年10月18日土曜日

今作っているアプリは、サーバ側の実装も要ります。

サーバはWindowsだけでなくUnixで使うことも想定しているので、JavaでServletと言う線で考えてみたのですが、そうなるとwev.xmlやらの設定もいるし、warは作らないといけないし、メンドクサそうです。

pythonでCGIだと、Webサーバに置くだけでいいし、PythonもJavaと同じでどのOSでも動くと目論んでいたのですが。


おっとドッコイの助、そうは問屋が アッ 降ろさねー(拍子木がチョーン)


まずはデデンとファイルが見つかりませんのエラーが出ました。


 改行が違う





むむっ、「No such file or directry」とな!!

pythonのインタープリッターで直接test.pyを実行させると正常に動きます


紆余屈折のすえ、人生を6時間無駄にして、やっとわかったのがCGIスクリプトの先頭に書いて有る

#!/usr/bin/python

が生きていない、たまたまviで開くと「#!/usr/bin/python^M」と成っている。



どうやら「/usr/bin/python^M」を探しに行ってる様です、^Mを消して「/usr/bin/python」にすると無事に動き始めました。

Windowsの改行コードは16進数の「0x0d,0x0a」なのがunixの改行コードは「0x0a」なので0x0dコードが余り正確なパスとならに様です。


しかもvi以外のエディターではこれが表示されません。







でまー なんとか、^Mを消すと、動き始めました。

大文字小文字
で…、こんどは違うところでファイルが有りませんエラーが、
調べてみると何のことは無いWindowsではファイル名の大文字小文字を区別していないのが、Unixでは区別するからのエラーでした。








「サーバに よってプロトコル違反が発生しました」となるとpythonの簡易サーバを使い

  import http.server
  http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
とか
  python -m CGIHTTPServer

とかで動かしたせいかも知れないのですが・・・


Windows側が、改行を「0x0a」で返すと、.netのライブラリーがルール違反だと怒る様です。

ドットネット側の対応で、改行を気にしないで「0x0a」を使うと属性ファイルで宣言する必要があります。

作ったアプリが「aaa.exe」だったとすると「aaa.exe.config」というファイルを下記の内容で作ればOkです。



<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.net>
    <settings>
      <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
  </system.net>
</configuration>

pythonのバージョンが違う



Ubuntuにデフォルでインストールされているのはpython2ですが、今作っているのはpython2とpython3の両バージョンなので、pythonを再インストールしました。
こっちはネット上に情報が豊富なので、コマンド一発でインストールできました。


次回は
Unix上でのテストをする為に、Ubuntuを Oracle VirtualBoxで動かしました。
その時にも「動かねー」で七転八倒しました。

次回はその時の対応を記します。

ぶっちゃけた話、まるで真夜中に森の中で鬼ごっこをしている感じです。

チョット走ると、木にゴチン、 と思えば根っこでドテ






0 件のコメント:

コメントを投稿