世界的日曜WEBプログラマー日記 -5ページ目

世界的日曜WEBプログラマー日記

一年後に世界的なWEBサービスを運営するにはどうすればいいのか書いていく(予定)

FAXマシンのOSが古くなったのでOSをバージョンアップをした所、
FAXシステムが動かなくなった。
うーん、なにやらceleryがどうやら何かエラーを吐いている。

(マイ食ではApache&celery&djangoでfaxserver を構築しています。)

ImportError: cannot import name celeryd_multi
など謎エラー。困った時のpip update

sudo pip install -U Celery
sudo pip install -U django-celery

とりあえずこれで収まった。

続いての問題が、今度は全然POSTが動いていない。
なんでだろうと、djceleryのソースコードを見てみてデバッグしていると、QueryDICTが空っぽ。

どうやらdjango1.5以上から仕様の変更により
QUERY_DICTにheaderでContent-Typeをきちんと指定していないとrequest.POSTの中身自体が
空っぽになるみたいだ。

それだ!!

ということでceleryに問題が無いことがわかったので、

POSTする側(呼び出し側)に'Content-Type': 'application/x-www-form-urlencoded'
を追加する。

以下のようなpythonのPOSTでdjango v1.5以降のPOSTも動く。以前まではheaderを定義しても動いていた。

なお、次のようにすればpythonでPOSTができる。シンプルだ。
 conn = HTTPConnection( url )
headers = {'Content-Type': 'application/x-www-form-urlencoded' }
params = urlencode({'data': data, 'to': to, 'whateveryouwant': ""} )
conn.request('POST', '/send', params, headers )



無事解決!
おしまい。

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house

dateコマンドをsudoなしで実行したい


dateコマンドで時間を変更したい時、sudoが必要となる。
パスワードを入れるのは億劫ではないのだが、
例えばプログラムのテストでサーバーの時間を変える時などパスワード入力が面倒である。

こうしたときはvisudo で、次のように編集する。
(ユーザーtodorokiにパスワード無しで、dateコマンドを実行させる権限を与えたい場合)

todoroki ALL = (root) NOPASSWD: /bin/date

以上でいい。

1つ注意がある。
もしtodorokiがadminやsudoのグループだった場合、上記だけでは動かない。
それは、visudoに書かれている次の二行が悪さをしているためである。

%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL

上記2行をコメントアウトすれば、パスワード無しで動く。
ただ、何か別の副作用があるかも知れない。。今の所問題はないのだけど。。

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house
PythonでUSBデバイスを操る方法。

pyusbなどをインストールしたはいいものの、

usb.core.USBError: [Errno 13] Access denied (insufficient permissions)


などでエラーが出てしまう。sudoをつければいいのだが、例えばcron化するときなどで、一般ユーザーのほうが手堅い場合がある。
そういう場合はudevの編集を行う。

/etc/udev/rules.dのフォルダに
10-any_name_is_ok.rules

というファイルをつくる。
注意が必ず.rulesという拡張子にすること。そうじゃないと読み込んでくれない。
lsusbなどで、デバイス情報を追加し、以下を記載する。

SUBSYSTEM=="usb", ATTR{idVendor}=="067b", ATTR{idProduct}=="2303", MODE="0666", GROUP="plugdev"

後はudevの再起動をすれば良い。

sudo gpasswd -a username plugdev
sudo chmod a+r /etc/udev/rules.d/10-any_name_is_ok.rules
sudo udevadm control –reload-rules
sudo restart udev

などを行っておくこと

株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ
等々力 康弘
@rocky_house