サーバは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 件のコメント:
コメントを投稿