ウノウラボ by Zynga Japan: PubSubHubbubとは : http://labs.unoh.net/2009/08/what-is-pubsubhubbub.html
PubSubHubBubのpubに対応する : ryo.com : http://www.ryo.com/2009/09/04/991/
2012年10月12日金曜日
2012年9月26日水曜日
[memo] Eclipse PHP用ユニットテストプラグイン
Eclipse PDT のための継続的テストランナー v2 - MakeGood - Piece Framework : http://piece-framework.com/projects/makegood/wiki/Eclipse_PDT_%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E7%B6%99%E7%B6%9A%E7%9A%84%E3%83%86%E3%82%B9%E3%83%88%E3%83%A9%E3%83%B3%E3%83%8A%E3%83%BC_v2
2012年5月29日火曜日
富士通 FMV-BIBLO LOOX T70M を似非SSD化する
今回使用した機器
メーカー:世田谷電器
製品名:1.8インチTOSHIBA IDEハードディスクの代わりにCFカードを使えるようにするアダプター
型番:AR-IDE1CF500
メーカー:Trancend
製品名:CompactFlash 133x 32GB
型番:TS32GCF133
元のHDDの状態
差し込んだところ。
結構、っていうかかなりスカスカ。
何か、スペーサーで抑えないと危険かも。
元のHDDの情報とアクセス速度:
(参考)CFカードをPCカードアダプタ経由でアクセス:
ライトがちょっと遅くなっちゃったけど、まあ、許容範囲。
今回はCFカードがUDMA5規格のスピードにに満たないものを使っているのでこんなもんでしょう。
CFカードは公称のデータ転送速度が15~40MB/秒(最大)となっているので、実測のほうが早いという珍しい現象。
メーカー:世田谷電器
製品名:1.8インチTOSHIBA IDEハードディスクの代わりにCFカードを使えるようにするアダプター
型番:AR-IDE1CF500
メーカー:Trancend
製品名:CompactFlash 133x 32GB
型番:TS32GCF133
元のHDDの状態
差し込んだところ。
結構、っていうかかなりスカスカ。
何か、スペーサーで抑えないと危険かも。
ubuntu@ubuntu:~$ sudo hdparm -i /dev/sda /dev/sda: Model=TOSHIBA MK6006GAH, FwRev=BZ002A, SerialNo=85R92829T Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=117210240 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: unknown setting WriteCache=enabled Drive conforms to: Unspecified: ATA/ATAPI-1,2,3,4,5,6 * signifies the current active mode ubuntu@ubuntu:~$ sudo hdparm -t /dev/sda /dev/sda: Timing buffered disk reads: 58 MB in 3.05 seconds = 19.00 MB/sec ubuntu@ubuntu:~$ dd if=/dev/zero of=/media/6a98bbe9-b3ea-4b8b-80a5-7ab9e05d1902/tmp/hdwrite.test bs=1M count=1024 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 46.4496 秒、 23.1 MB/秒
(参考)CFカードをPCカードアダプタ経由でアクセス:
ubuntu@ubuntu:~$ sudo hdparm -i /dev/sdc /dev/sdc: Model=TS32GCF133, FwRev=20120327, SerialNo=617617561253D4000123 Config={ HardSect NotMFM Removeable DTR>10Mbs nonMagnetic } RawCHS=62041/16/63, TrkSize=0, SectSize=576, ECCbytes=4 BuffType=DualPort, BuffSize=1kB, MaxMultSect=1, MultSect=off CurCHS=62041/16/63, CurSects=62537328, LBA=yes, LBAsects=62537328 IORDY=no, tPIO={min:120,w/IORDY:120} PIO modes: pio0 pio1 pio2 pio3 pio4 AdvancedPM=yes: disabled (255) WriteCache=disabled * signifies the current active mode ubuntu@ubuntu:~$ sudo hdparm -t /dev/sdc /dev/sdc: Timing buffered disk reads: 4 MB in 4.60 seconds = 891.24 kB/sec ubuntu@ubuntu:~$ dd if=/dev/zero of=/media/51c6ce70-7151-4bd4-9076-79a54eee9d0f/tmp/hdwrite.test bs=1M count=1024 dd: `/media/51c6ce70-7151-4bd4-9076-79a54eee9d0f/tmp/hdwrite.test' を書き込んでいます: 読み込み専用ファイルシステムです 97+0 レコード入力 96+0 レコード出力 100696064 バイト (101 MB) コピーされました、 76.0677 秒、 1.3 MB/秒変換アダプタに刺してアクセス:
ken@hexahedron:~$ sudo hdparm -i /dev/sda /dev/sda: Model=TS32GCF133, FwRev=20120327, SerialNo=617617561253D4000123 Config={ HardSect NotMFM Removeable DTR>10Mbs nonMagnetic } RawCHS=62041/16/63, TrkSize=0, SectSize=576, ECCbytes=4 BuffType=DualPort, BuffSize=1kB, MaxMultSect=1, MultSect=off CurCHS=62041/16/63, CurSects=62537328, LBA=yes, LBAsects=62537328 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 AdvancedPM=yes: disabled (255) WriteCache=disabled * signifies the current active mode ken@hexahedron:~$ sudo hdparm -t /dev/sda /dev/sda: Timing buffered disk reads: 180 MB in 3.03 seconds = 59.49 MB/sec ken@hexahedron:~$ dd if=/dev/zero of=/tmp/hdwrite.test bs=1M count=1024 1024+0 レコード入力 1024+0 レコード出力 1073741824 バイト (1.1 GB) コピーされました、 59.8092 秒、 18.0 MB/秒リードは約3倍、ライトは約0.8倍。
ライトがちょっと遅くなっちゃったけど、まあ、許容範囲。
今回はCFカードがUDMA5規格のスピードにに満たないものを使っているのでこんなもんでしょう。
CFカードは公称のデータ転送速度が15~40MB/秒(最大)となっているので、実測のほうが早いという珍しい現象。
2012年4月28日土曜日
[memo] Ubuntu12 の Eclipse に Aptana Studio 3 を入れる
今回は Plugin 版の Aptana Studio 3 を入れる。
Eclipse は Ubuntu のパッケージがあるのでそのまま入れる。
日本語化したければ、Pleiades もパッケージがあるので、
あと、Aptana を入れる前に ライブラリを1つ追加
Aptana は
参考:
How to Install Eclipse IDE on Ubuntu 12.04
http://blog.sudobits.com/2012/04/26/how-to-install-eclipse-ide-on-ubuntu-12-04/
Aptana | Download
http://aptana.com/downloads/start
An internal error has occurred. No more handlesNative code library failed to load. (java.lang.UnsatisfiedLinkError: /usr/bin/Tit » Community Questions & Answers » Appcelerator Developer Center
http://developer.appcelerator.com/question/127412/an-internal-error-has-occurred-no-more-handlesnative-code-library-failed-to-load-javalangunsatisfiedlinkerror-usrbintit
Eclipse は Ubuntu のパッケージがあるのでそのまま入れる。
sudo apt-get install eclipse-platform
日本語化したければ、Pleiades もパッケージがあるので、
sudo apt-get insatll pleiadesとしたあと、 /etc/eclipse.ini を開いて以下を追記
-javaagent:/usr/share/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
あと、Aptana を入れる前に ライブラリを1つ追加
sudo apt-get install libjpeg62
Aptana は
Aptana | Download : http://aptana.com/downloads/startに書いてある通り、 Eclipse を起動して「ヘルプ」 -> 「新規ソフトウェアのインストール...」を開いて「作業対象」のところに以下のURLをペーストしてエンターキーを押す。
http://download.aptana.com/studio3/plugin/installあとは普通にプラグイン入れるのと同じ。
参考:
How to Install Eclipse IDE on Ubuntu 12.04
http://blog.sudobits.com/2012/04/26/how-to-install-eclipse-ide-on-ubuntu-12-04/
Aptana | Download
http://aptana.com/downloads/start
An internal error has occurred. No more handlesNative code library failed to load. (java.lang.UnsatisfiedLinkError: /usr/bin/Tit » Community Questions & Answers » Appcelerator Developer Center
http://developer.appcelerator.com/question/127412/an-internal-error-has-occurred-no-more-handlesnative-code-library-failed-to-load-javalangunsatisfiedlinkerror-usrbintit
2012年4月27日金曜日
[memo] Ubuntu12 で Hibernation
Ubuntu12 はデフォルトでは GUI からの Hibernation が無効になってます。
しかし、コマンドラインから以下のコマンドを打てば Hibernation できます。
参考:
Hibernation Disabled by Default in Ubuntu 12.04 ~ Ubuntu Vibes | Daily Ubuntu Linux Updates
http://www.ubuntuvibes.com/2012/04/hibernation-disabled-by-default-in.html
しかし、コマンドラインから以下のコマンドを打てば Hibernation できます。
sudo pm-hibernateこれで、正常にハイバネーションできることを確認できたら、
/etc/polkit-1/localauthority/50-local.d/com.ubuntu.desktop.pklaというファイルを作成し、以下のように記述すると、 GUI から Hibernation できるようになります。
[Re-enable hibernate by default] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=yes
参考:
Hibernation Disabled by Default in Ubuntu 12.04 ~ Ubuntu Vibes | Daily Ubuntu Linux Updates
http://www.ubuntuvibes.com/2012/04/hibernation-disabled-by-default-in.html
2012年4月16日月曜日
[memo] Ubuntu12 で Eclipse の Subclipse Plugin が動かなかった件
Ubuntu で標準でインストールできる libsvn-java が Subclipse 1.8.* が要求する 1.7 ではなく 1.6 なため。
以下のとおりに apt のリポジトリを追加して新しい libsvn-java をインストールする。
すでに libsvn-java がインストールされているのなら、一度削除する。
リポジトリを追加して apt の DB を update してインストール。
参考:
java - Getting subclipse to work on Ubuntu 64 and Indigo - Incompatible JavaHL library loaded. 1.7.x or later required - Stack Overflow
http://stackoverflow.com/questions/9032252/getting-subclipse-to-work-on-ubuntu-64-and-indigo-incompatible-javahl-library
以下のとおりに apt のリポジトリを追加して新しい libsvn-java をインストールする。
すでに libsvn-java がインストールされているのなら、一度削除する。
sudo apt-get purge libsvn-java
リポジトリを追加して apt の DB を update してインストール。
sudo add-apt-repository ppa:dominik-stadler/subversion-1.7 sudo apt-get update sudo apt-get install libsvn-java
参考:
java - Getting subclipse to work on Ubuntu 64 and Indigo - Incompatible JavaHL library loaded. 1.7.x or later required - Stack Overflow
http://stackoverflow.com/questions/9032252/getting-subclipse-to-work-on-ubuntu-64-and-indigo-incompatible-javahl-library
2012年4月15日日曜日
[memo] Mylyn with Redmine (none Redmine plugin)
Mylyn Software site URL :
http://download.eclipse.org/mylyn/incubator/3.7
Mylyn Incubator -> Mylyn Tasks Connector: Web Templates
参考:
カン君のブログ: Eclipse + Mylyn : Redmine + Subversion
http://rowoon520.blogspot.jp/2011/03/eclipse-mylyn-redmine-subversion.html
Mylyn + Redmine でタスク駆動開発 : eclipse, mylyn, redmine | メモリークラフト :
http://www.memorycraft.jp/2009/06/mylyn-redmine.html
http://download.eclipse.org/mylyn/incubator/3.7
Mylyn Incubator -> Mylyn Tasks Connector: Web Templates
参考:
カン君のブログ: Eclipse + Mylyn : Redmine + Subversion
http://rowoon520.blogspot.jp/2011/03/eclipse-mylyn-redmine-subversion.html
Mylyn + Redmine でタスク駆動開発 : eclipse, mylyn, redmine | メモリークラフト :
http://www.memorycraft.jp/2009/06/mylyn-redmine.html
2012年4月4日水曜日
[memo] PHP Development
今の仕事場で使っている開発環境(IDE)のメモ
Aptana
http://aptana.com/
Eclipseのディストリビューションの一つ。
Ruby on Rails、PHP、Python(Django)の統合開発環境。
HTML,CSS,JavaScriptエディタとしても非常に優秀。
リモートサーバーへのデプロイとかもできる。FTP,SFTP,FTPSクライアント内蔵。
昨年Appcelerator(Titaniumというマルチプラットフォーム開発環境を作っている)に買収されたけどこっちも継続中な模様。
smartypdt - Smarty Support for PDT - Google Project Hosting
http://code.google.com/p/smartypdt/
Smarty用エディタ。
インストール方法がちょっと特殊なので注意。
http://code.google.com/p/smartypdt/wiki/InstallSmartyPDT
Zend Debbuger
Zend's contribution to Eclipse PDT - Zend.com
http://www.zend.com/en/community/pdt
Zend Frameworkで有名なとこ、でもそのデバッガしか使わない。
以下、PHPとはあんま関係ないの。
Pleiades - Eclipse プラグイン日本語化プラグイン | MergeDoc Project
http://mergedoc.sourceforge.jp/index.html#/pleiades.html
日本語化プラグイン、AOPという方法を使ってリアルタイムで日本語パッチをかけているので、対応を表明されていないプラグインとかでも部分的に日本語化されたりする。
JStyle - Eclipse 改行、タブ、全角空白を表示 | MergeDoc Project
http://mergedoc.sourceforge.jp/index.html#jstyle.html
Pleiadesと同じとこのプラグイン。エディタにパッチがあたって改行や空白文字を可視化できる。
Eclipseのバージョンに依存するので注意
※2012-04-17追記
Aptana Studio の 3.0.9 までは Eclipse Plathome のバージョンが 3.6 ベースだったが 3.1 以降は Eclipse 3.7 ベースに変更されたので、Aptana Studio 3.1.0 以降(2012-04-17現在で最新は3.1.1)を使う場合には Jstyleも3.7用のものを使用する必要がある。ただし、3.7移行は32ビット版と64ビット版があるので更に注意が必要。
AnyEdit tools plugin for Eclipse
http://andrei.gmxhome.de/anyedit/
大文字、小文字変換とかtab<->space変換とか小技を効かせてくれる。
Eclipse Mylyn Open Source Project
http://www.eclipse.org/mylyn/
タスク管理ツール、BugzillaやTrac、Mantisなどバグトラッカー・イシュートラッカーと連携できる。
subclipse.tigris.org
http://subclipse.tigris.org/
Subversionプラグイン。今のところSubversionの最新版1.7対応はこれだけ?
リビジョン指定比較で文字化けするとかちょっと微妙。
2012年1月31日火曜日
[memo] MySQL の BETWEEN 演算子について
CREATE TABLE `interval_test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `period_from` datetime DEFAULT NULL, `period_to` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `Index_2` (`period_from`,`period_to`) ) ENGINE=InnoDB DEFAULT CHARSET=ujis;
こんなテーブルで、以下のようなSQLを実行してみると
mysql> EXPLAIN SELECT * FROM interval_test WHERE now() BETWEEN period_from AND period_to; +----+-------------+---------------+-------+---------------+---------+---------+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------+-------+---------------+---------+---------+------+------+--------------------------+ | 1 | SIMPLE | interval_test | range | Index_2 | Index_2 | 9 | NULL | 50 | Using where; Using index | +----+-------------+---------------+-------+---------------+---------+---------+------+------+--------------------------+ 1 row in set (0.00 sec)
こんな書き方が出来ることにも驚いたけど、インデックスもちゃんと使っててさらに驚いたりなんかしたので、メモ。
2012年1月23日月曜日
[memo] 64bit コンパイル環境
PythonのライブラリをWindowsでコンパイルする場合、現在はVC2008である必要があるらしい。
32bit環境であればVC2008Expressをインストールするだけでよいが、64bit環境の場合はそれだけではダメ。
32bit環境であればVC2008Expressをインストールするだけでよいが、64bit環境の場合はそれだけではダメ。
参考:
ダウンロード:
インストール後、コンパイル直前に
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat"を実行して、コンパイルを実行する。
2012年1月18日水曜日
[memo] ubuntu server で fbterm
参考:
コマンドラインで以下を実行:
.fbtermrc を編集:
.bashrc を編集:
コマンドラインで以下を実行:
sudo echo uvesafb >> /etc/initramfs-tools/modules sudo echo "options uvesafb mode_option=800x600-32" >/etc/modprobe.d/uvesafb.conf sudo vigr 【videoグループに自分のユーザーを追加】 sudo vigr -s 【videoグループに自分のユーザーを追加】 sudo apt-get install v86d fbterm unifont ttf-vlgothic libcap2-bin sudo setcap 'cap_sys_tty_config+ep' /usr/bin/fbterm
.fbtermrc を編集:
font-names=unifont,mono font-size=16
.bashrc を編集:
#... case "$TERM" in linux*) fbterm ;; *) ;; esac
2012年1月13日金曜日
2012年1月12日木曜日
[memo] blogger に syntaxhighlighter を導入
ソースコードを行番号付きで、きれいに表示する「SyntaxHighlighter」の導入と使い方 - gogoToRoTAN を参考に
ダッシュボード - その他の設定 - テンプレート
を開き、「HTMLの編集」を押下、「続行」を押下
ダッシュボード - その他の設定 - テンプレート
を開き、「HTMLの編集」を押下、「続行」を押下
</head>を検索して、その直上に以下のコードを挿入
[memo] install sphinx with buildout (windows)
install python27(snip)
include command search path c:\python27
download http://pypi.python.org/pypi/virtualenv
expand virtualenv-<vernum>.tar.gz
download https://gist.github.com/1476152
include command search path c:\python27
mkdir c:\work cd c:\work
download http://pypi.python.org/pypi/virtualenv
expand virtualenv-<vernum>.tar.gz
python virtualenv-<vernum>\virtualenv.py --no-site-packages --distribute sphinx cd sphinx Scripts\pip install zc.buildout Scripts\buildout init
download https://gist.github.com/1476152
bin\buildout
2012年1月11日水曜日
zc.buildout と PythonPaste を使ったデプロイ
このドキュメントはDeploy using zc.buildout and PythonPasteの翻訳です。
正確な内容を確認するには、上記英文ドキュメントを参照してください。
この記事では、 Flask のアプリケーションを、開発、デプロイおよび実行するために zc.buildout を使用する方法について説明します。
さらに、いくつかの pythonpaste ユーティリティを備えています。
最初のディレクトリ構造を作成します::
その後、 buildout ディレクトリに bootstrap.py ファイルをダウンロードしてください。
src/hello/__init__.py ファイルを編集します::
src/hello/tests.py ファイルを編集します:
src/hello/script.py ファイルを編集します:
README ファイルを作成します:
setup.py ファイルを編集します:
etc/deploy.ini.in ファイルを編集します:
buildout.cfg ファイルを編集します::
その後、ブートストラップ buildout を:
buildout.cfgで設定を調整し、アプリケーションを構築する:
テストを実行します:
それでは、サーバを起動:
お使いのブラウザで http://127.0.0.1:5000 をご覧ください。
Werkzeug デバッガを起動するためには http://127.0.0.1:5000/?broken をご覧ください。
アプリケーションを終了するには CtrlキーC を押下します。
注: buildout.cfg で設定を変更するときは、 bin/buildout を使ってアプリケーションを再構築する必要があります。
参考文献:
Florent Xicluna によるこのスニペットは、何でも好きなもののために自由に使うことができます。
パブリックドメインと考えてください。
正確な内容を確認するには、上記英文ドキュメントを参照してください。
zc.buildout と PythonPaste を使ったデプロイ
By Florent Xicluna filed in Application Structure序文
Pythonのアプリケーションを開発するための2つの一般的な方法があります。この記事では、 Flask のアプリケーションを、開発、デプロイおよび実行するために zc.buildout を使用する方法について説明します。
さらに、いくつかの pythonpaste ユーティリティを備えています。
- Paste は WSGI HTTP server (及びスレッドプール) を提供します。
- PasteDeploy は WSGI server (と logging) 設定機能を提供します。
- PasteScript は アプリケーションの機能 (コマンド bin/paster) を提供します。
- アプリケーションおよびサーバーの設定の一元管理: buildout.cfg
- 簡易かつ再現性のあるデプロイメント
- 異なる構成でのアプリケーション実行(開発、本番)
- デーモンとしてサーバーを実行可能(*nix のみ)
- nose を使ったテストスイートの実行
buildoutの環境を作成する
buildout のディレクトリ構成は次のようになります:+-buildout_env/ +-bootstrap.py +-buildout.cfg +-etc/ | +-deploy.ini.in +-README +-setup.py +-src/ +-hello/ +-__init__.py +-script.py +-tests.py
最初のディレクトリ構造を作成します::
~ $ mkdir buildout_env ~ $ cd buildout_env ~/buildout_env $ mkdir -p etc src/hello
その後、 buildout ディレクトリに bootstrap.py ファイルをダウンロードしてください。
src/hello/__init__.py ファイルを編集します::
# -*- coding: utf-8 -*- from flask import Flask, request class _DefaultSettings(object): USERNAME = 'world' SECRET_KEY = 'development key' DEBUG = True # create the application app = Flask(__name__) app.config.from_object(_DefaultSettings) del _DefaultSettings def init_db(): """Create the database tables.""" pass @app.route('/') def index(): if request.args: BREAK (with_NameError) return 'Hello %s!' % app.config['USERNAME'].title()
src/hello/tests.py ファイルを編集します:
# -*- coding: utf-8 -*- import unittest import hello class HelloTestCase(unittest.TestCase): def setUp(self): """Before each test, set up a blank database""" self.app = hello.app.test_client() hello.init_db() def tearDown(self): """Get rid of the database again after each test.""" pass def test_hello(self): """Test rendered page.""" hello.app.config['USERNAME'] = 'jean' rv = self.app.get('/') assert 'Hello Jean!' in rv.data def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(HelloTestCase)) return suite if __name__ == '__main__': unittest.main()
src/hello/script.py ファイルを編集します:
# -*- coding: utf-8 -*- """Startup utilities""" import os import sys from functools import partial import paste.script.command import werkzeug.script etc = partial(os.path.join, 'parts', 'etc') DEPLOY_INI = etc('deploy.ini') DEPLOY_CFG = etc('deploy.cfg') DEBUG_INI = etc('debug.ini') DEBUG_CFG = etc('debug.cfg') _buildout_path = __file__ for i in range(2 + __name__.count('.')): _buildout_path = os.path.dirname(_buildout_path) abspath = partial(os.path.join, _buildout_path) del _buildout_path # bin/paster serve parts/etc/deploy.ini def make_app(global_conf={}, config=DEPLOY_CFG, debug=False): from hello import app app.config.from_pyfile(abspath(config)) app.debug = debug return app # bin/paster serve parts/etc/debug.ini def make_debug(global_conf={}, **conf): from werkzeug.debug import DebuggedApplication app = make_app(global_conf, config=DEBUG_CFG, debug=True) return DebuggedApplication(app, evalex=True) # bin/flask-ctl shell def make_shell(): """Interactive Flask Shell""" from flask import request from hello import init_db as initdb app = make_app() http = app.test_client() reqctx = app.test_request_context return locals() def _init_db(debug=False, dry_run=False): """Initialize the database.""" from hello import init_db print 'init_db()' if dry_run: return # Configure the application if debug: make_debug() else: make_app() # Create the tables init_db() def _serve(action, debug=False, dry_run=False): """Build paster command from 'action' and 'debug' flag.""" if action == 'initdb': # First, create the tables return _init_db(debug=debug, dry_run=dry_run) if debug: config = DEBUG_INI else: config = DEPLOY_INI argv = ['bin/paster', 'serve', config] if action in ('start', 'restart'): argv += [action, '--daemon'] elif action in ('', 'fg', 'foreground'): argv += ['--reload'] else: argv += [action] # Print the 'paster' command print ' '.join(argv) if dry_run: return # Configure logging and lock file if action in ('start', 'stop', 'restart', 'status'): argv += [ '--log-file', abspath('var', 'log', 'paster.log'), '--pid-file', abspath('var', 'log', '.paster.pid'), ] sys.argv = argv[:2] + [abspath(config)] + argv[3:] # Run the 'paster' command paste.script.command.run() # bin/flask-ctl ... def run(): action_shell = werkzeug.script.make_shell(make_shell, make_shell.__doc__) # bin/flask-ctl serve [fg|start|stop|restart|status|initdb] def action_serve(action=('a', 'start'), dry_run=False): """Serve the application. This command serves a web application that uses a paste.deploy configuration file for the server and application. Options: - 'action' is one of [fg|start|stop|restart|status|initdb] - '--dry-run' print the paster command and exit """ _serve(action, debug=False, dry_run=dry_run) # bin/flask-ctl debug [fg|start|stop|restart|status|initdb] def action_debug(action=('a', 'start'), dry_run=False): """Serve the debugging application.""" _serve(action, debug=True, dry_run=dry_run) # bin/flask-ctl status def action_status(dry_run=False): """Status of the application.""" _serve('status', dry_run=dry_run) # bin/flask-ctl stop def action_stop(dry_run=False): """Stop the application.""" _serve('stop', dry_run=dry_run) werkzeug.script.run()
README ファイルを作成します:
/ hello / "Hello World!" application
setup.py ファイルを編集します:
from setuptools import setup, find_packages import os name = "hello" version = "0.1" def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() setup( name=name, version=version, description="a hello world demo", long_description=read('README'), # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers classifiers=[], keywords="", author="", author_email='', url='', license='', package_dir={'': 'src'}, packages=find_packages('src'), include_package_data=True, zip_safe=False, install_requires=[ 'setuptools', 'Flask', ], entry_points=""" [console_scripts] flask-ctl = hello.script:run [paste.app_factory] main = hello.script:make_app debug = hello.script:make_debug """, )
etc/deploy.ini.in ファイルを編集します:
# ${:outfile} # # Configuration for use with paster/WSGI # [loggers] keys = root, wsgi [handlers] keys = console, accesslog [formatters] keys = generic, accesslog [formatter_generic] format = %(asctime)s %(levelname)s [%(name)s] %(message)s [formatter_accesslog] format = %(message)s [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = generic [handler_accesslog] class = FileHandler args = (os.path.join(r'${server:logfiles}', 'access.log'), 'a') level = INFO formatter = accesslog [logger_root] level = INFO handlers = console [logger_wsgi] level = INFO handlers = accesslog qualname = wsgi propagate = 0 [filter:translogger] use = egg:Paste#translogger setup_console_handler = False logger_name = wsgi [app:main] use = egg:${:app} filter-with = translogger [server:main] use = egg:Paste#http host = ${server:host} port = ${server:port} threadpool_workers = ${:workers} threadpool_spawn_if_under = ${:spawn_if_under} threadpool_max_requests = ${:max_requests}
buildout.cfg ファイルを編集します::
[buildout] develop = . parts = app mkdirs deploy_ini deploy_cfg debug_ini debug_cfg test newest = false # eggs will be installed in the default buildout location # (see .buildout/default.cfg in your home directory) # unless you specify an eggs-directory option here. [server] host = 127.0.0.1 port = 5000 logfiles = ${buildout:directory}/var/log [app] recipe = zc.recipe.egg eggs = hello Paste PasteScript PasteDeploy interpreter = python-console [mkdirs] recipe = z3c.recipe.mkdir paths = ${server:logfiles} [deploy_ini] recipe = collective.recipe.template input = etc/deploy.ini.in output = ${buildout:parts-directory}/etc/${:outfile} outfile = deploy.ini app = hello workers = 10 spawn_if_under = 5 max_requests = 100 [debug_ini] <= deploy_ini outfile = debug.ini app = hello#debug workers = 1 spawn_if_under = 1 max_requests = 0 [deploy_cfg] recipe = collective.recipe.template input = inline: # Deployment configuration DEBUG = False SECRET_KEY = 'production key' USERNAME = 'Fernand' output = ${buildout:parts-directory}/etc/deploy.cfg [debug_cfg] recipe = collective.recipe.template input = inline: # Debugging configuration DEBUG = True SECRET_KEY = 'development key' USERNAME = 'Raoul' output = ${buildout:parts-directory}/etc/debug.cfg [test] recipe = pbp.recipe.noserunner eggs = hello defaults = -v
アプリケーションをデプロイします
まず、お気に入りのDVCSを使用してビルドアウトのディレクトリを保存する、または将来の展開のためのtarballを作成することができます。その後、ブートストラップ buildout を:
~/buildout_env $ python bootstrap.py --distribute
buildout.cfgで設定を調整し、アプリケーションを構築する:
~/buildout_env $ bin/buildout
テストを実行します:
~/buildout_env $ bin/test Test rendered page. ... ok ------------------------------------------------------------ Ran 1 test in 0.055s OK ~/buildout_env $
それでは、サーバを起動:
~/buildout_env $ bin/flask-ctl debug fg bin/paster serve parts/etc/debug.ini --reload Starting subprocess with file monitor Starting server in PID 24862. serving on http://127.0.0.1:5000
お使いのブラウザで http://127.0.0.1:5000 をご覧ください。
Werkzeug デバッガを起動するためには http://127.0.0.1:5000/?broken をご覧ください。
アプリケーションを終了するには CtrlキーC を押下します。
注: buildout.cfg で設定を変更するときは、 bin/buildout を使ってアプリケーションを再構築する必要があります。
参考文献:
Florent Xicluna によるこのスニペットは、何でも好きなもののために自由に使うことができます。
パブリックドメインと考えてください。
登録:
投稿 (Atom)