OdooのSSLアクセス
odooのconfファイルのproxy_modeと“HTTP_X_FORWARDED_HOST”の値によりプロキシモードかどうかが決められます。
proxy_mode→True、それにHTTP_X_FORWARDED_HOSTの値があれば、werkzeugのproxyfixメソッドが実行される
また、proxyfixメソッドにHTTP_X_FORWARDED_PROTOによりnviron['wsgi.url_scheme']の値が付与されます。
proxy_mode→TrueにしてもHTTP_X_FORWARDED_HOSTが設定されていないので、狙っているproxyfixメソッドが実行されていない。
結局、werkzeug.utils.redirect処理を行った時に非プロキシモード処理となるので、HTTP遷移が発生しております。
解決方法:def application(environ, start_response)関数の最初に以下の処理を加える
environ[HTTP_X_FORWARDED_HOST]→URL
environ[HTTP_X_FORWARDED_PROTO]→’HTTPS’
pythonのmultiprocessing処理
ファイルダウンロードの場合、
- A処理は、ラッパーページを出す;
- B処理はファイルの状態を監視する(ダウンロード可能となるとリンクを出す)
このように書くと、メソッドAが別途で実行されます。
p = Process(target=メソッドA, args=(引数1, 引数2,))
p.start()
Bのほうは、jquery(ajax)を利用して、繰り返して監視する
HTML |
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script type="text/javascript"> window.onload=showPro; var bar = 1; var my_time; var file_name = "{{filename}}"; var flg; function showPro(){ var pro = document.getElementById("div2"); pro.style.width = bar+"px"; bar = bar+5; my_time = setTimeout("showPro()",500); $("p").hide(); $.ajax({ url: "/download_file/", type: "POST", data: null, success: function (data) { data = JSON.parse(data); if (data["flg"] == 1) { pro.style.width = '100%'; clearTimeout(my_time); $("p").show(); } } }); } </script> |
Forkは以下のように有効ですが、Windows環境で使えないのは残念
new_pid = os.fork()
if new_pid == 0:
return output_html(request, filepath)
else:
その他の処理
Elasticスクロール処理
通常時に、大量データを検索する時、全てのデータを取り込んでから、検索条件と一致するものを出すこととなります。
なので、Elasticsearch Scroll APIを利用して、ページごとのデータを取り出す。
流れとしては、以下のようです。
1,一回目の実行でスクロールIDを取得
POST http://localhost:9200/インデックス名/_search?scroll=2m
{"size": 100, | 1ページの出力件数 | |||
"query": { | ||||
"bool": { | ||||
何らかの絞り条件 | ||||
} | ||||
} | ||||
} |
最後の2mは、2分間保持という意味
2,二回目以降は、前回のIDを使って検索
POST http://localhost:9200/_search/scroll
{"scroll":"2m","scroll_id" : "すごく長い文字列" | ||||
} |
ループ処理が要るので、以下が参考となります。 https://gist.github.com/drorata/146ce50807d16fd4a6aa