サイトをFreeBSD11+python3.6+Bottleで作り直すメモ(11)-nginxとuWSGIで公開してみる
- 公開日: 2018/11/14(水) 19:21[JST]
- 更新日: 2023/01/02(月) 19:26[JST]
FreeBSDのポリシーが変わって2018年10月いっぱいでFreeBSD 10-Releaseは終了したとのことなのでタイトル変更。
これまではBottleが内蔵していたWebサーバで動作確認を行っていたが性能がいまいちなので実運用するなら適当なWSGIサーバを使ってね、とマニュアルにも書かれているので検討してみる。基本的にはh_kabocha氏によるBottle + uWSGI+ Nginx Quick Tutorialのやり方をそのまま使わせて頂いた。ここではFreeBSD環境特有の箇所のみ記載する。
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(10)-ステータスコードとリダイレクト
- 公開日: 2016/11/04(金) 19:31[JST]
サイトを作っていると、
任意のステータスコードを出力したい(例えば「URLからコンテンツを動的に作成するが、URLの書式が不正の時はステータスコード404を出したい」)
サイトの構成を大きく変えたいが、旧URLからアクセスできるようリダイレクトを行いたい
といったことをやりたい場合がある。
Bottleでは、abort(ステータスコード, テキスト)、redirect(リダイレクト先のURL, ステータスコード)という関数を使うことで上記のことを実現できるようになっている。具体的にはこんな感じ。
from bottle import route, run, abort, redirect @route('/<filepath:path>') def abort_and_redirect(filepath): if filepath=='404error': abort(404, 'Not Found') elif filepath=='old/contents': redirect('http://somewhere/new/contents', 301)
VirtualBoxでIPXが使えるかテスト
- 公開日: 2016/10/22(土) 20:12[JST]
サーバを入れ替えるにあたって問題になるのがDOS用ファイルサーバ。Netwareクローンのmars_nweというのを使っているのだがこれはFreeBSD8までしか対応していない。Samba使えばいいじゃん、って思うかもしれないけどSambaだとDOSにTCP/IP環境を入れなきゃいけないし、何よりもPC9821やTOWNS用のLANマネージャ(NTサーバの4.0以前のバージョンについてくる。念のためヤフオクで買っておくべきか…)を持っていない。それにLANマネージャはコンベンショナルメモリ食いなんで(TCP/IPを入れるとさらにメモリを食う)あまり使い勝手がよろしくない。だからNetwareで行きたい。
で、サーバOSを更新するとmars_nweは使えなくなる。なんでFreeBSD8+IPX環境をどっかで確保しておく必要がある。でも基本DOSでしか使わない[1]サーバを確保するのも場所と電気代の無駄かと。
てことで、仮想環境にFreeBSD8をインストールしてそこにmars_nweを入れればいいんじゃないかと。ただIPXをサポートしていないホストでIPXのパケットを出力できるのか、というのが問題。ということでテストのため、Linux上のVirtualBoxにFreeDOS+Netwareクライアントをインストールしてみた次第。
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(9)-Cookie
- 公開日: 2015/03/29(日) 15:34[JST]
クッキーの設定
クッキーの設定にはresponse.set_cookieを使う。下の例ではpostメソッドで取得したフォームデータをmydomain.comドメイン共通のクッキーとして設定する。デフォルトではクッキーはすぐ消滅するとのことなので変数max_ageを使って期限を一年に設定している。
from bottle import route, run, post, request, response @post('/set_cookie') def set_cookie(): max_age = 3600 * 24 * 365 cookie = request.forms.getunicode('cookie') response.set_cookie('cookie', cookie, max_age=max_age, domain='mydomain.com', path='/')
クッキーの取得
ブラウザから送られるクッキーの取得はrequest.get_cookieを使う。
from bottle import route, run, request @route('/get_cookie') def get_cookie(): cookie = request.get_cookie('cookie', default='')
【朗報】Xubuntu14.04で何とか親指シフトが使い物になりそう
- 公開日: 2014/10/26(日) 09:09[JST]
今年の2月に書いた記事では、「Xubuntu13.10の親指シフト、まともに使えねー」という状態だったわけだが。14.04LTSで解消されたかテストしてみた次第。
ibus-anthyはとにかく「言語バーがなくなり、現在の入力がかななのか英数なのかあるいは全角英数なのかを画面上に表示することができない」というのが難点だったが、1.5.5になって表示できるようになり多少はマシになった。でも表示位置はキャレットの右下固定っぽい。まだ満足できるレベルじゃない。
fcitx-anthyは相変わらず親指シフトのキーマップファイルをちゃんと読んでくれない。
ということでデフォルトの状態では(親指シフトベースでキーマップを入れ替えたい私にとっては)未だ使い物になるとは言いがたい。
だが解決策はあった。よーするにfcitx-anthyを自分でビルドして、デフォルトの親指シフトキーマップを入れ替えてしまえばいい。
デフォルトのキーマップはsrc/default_tables.cppにある。そして、そこを自分の好みにいじった上でビルドして、入れ替えてしまえば良さそうだ。ビルドのやり方は、Ubuntu Weekly Recipeのこの記事が参考になる。
これで何とか12.04LTS→14.04LTSへの移行ができるかな、と期待。
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(8)-javascriptで夏時間
- 公開日: 2014/07/27(日) 12:54[JST]
ブログなんかの作成/更新日時は日本時間で管理するつもりだが、「現地時間も併記できるとカッコいいよね」と思った次第。ささやかながら英語のコンテンツもあるしね。
表示できるようにしたいのは以下の3点。
作成/更新日時の現地時間
作成/更新日時の時差
その日時が夏時間中であるかどうか
あまりクライアントサイドのプログラミングって詳しく無いけど(むろんサーバサイドもせいぜいカジュアルレベルだけどそれ未満)、javascriptにうってつけの機能があるみたい。
DateオブジェクトのgetTimezoneOffset()メソッドがそれで、Dateオブジェクトが指す日時に対する標準時への時間差を分単位で示してくれるようだ(+09:00の日本時間なら-540)。夏時間かどうかを判別するルーチンがabout.comにあったのでそれをそのままありがたく使わせてもらおう。
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(7)-MariaDB:FULLTEXTインデックス
- 公開日: 2014/07/14(月) 06:54[JST]
- 更新日: 2021/02/23(火) 18:20[JST]
たたみラボさんのところの記事を元にMariaDBにFULLTEXTインデックスを設定してみた。
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(6)-py-mecab
- 公開日: 2014/07/09(水) 23:12[JST]
サイトを作るに当たって「やっぱ全文検索機能は欲しいよね」ということで調べてみた。どうやらMySQLのFULLTEXTインデックスを使うといいらしい。で、日本語でFULLTEXTインデックスを機能させるには、分かち書きのデータを用意しておく必要があるとのこと。コンテンツを作成、更新する際に分かち書きのデータを作成して保存するようにすればいいのかな
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(5)-フォームの扱い
- 公開日: 2014/06/29(日) 11:26[JST]
GETメソッドの場合
getメソッドの場合はrequest.queryを使う。
from bottle import route, run, request @route('/') def root(): id = request.query.id
サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(4)-pymysql
- 公開日: 2014/06/29(日) 10:42[JST]
手順としてはこんな感じ
準備
con = pymysql.connect( host='接続先のIPアドレス', port=ポート番号, db='データベース名', user='ユーザ名', passwd='パスワード', charset='utf8mb4') cur = con.cursor()
connectメソッドとcursorメソッドを順番に実行。connectメソッドのcharsetはMySQL(or MariaDB)の設定に応じて適宜変更する。