Symfoware

Symfowareについての考察blog

GistクローンのMemocurialをDebianで動かす

PasteBinやGistみたいなコードスニペット「stikked」をインストール
http://symfoware.blog68.fc2.com/blog-entry-1045.html

これに引き続き、Python + MercurialなGistクローン
「Memocurial」をDebianで動かしてみます。



Memocurial



社内向けGistとして開発されたようです。

Gist クローン作りました
http://troter.jp/timstudy-201110-memocurial-introduction/

リポジトリはこちら。
https://bitbucket.org/troter/memocurial/overview





インストール



結構苦戦しました。最近は、bootstrapを使うのが主流なんですね。
使ったことなかったので、似たようなツールで、かつ似たような構成のhesoのインストールを参考にしています。

https://github.com/lanius/heso


DebianだとデフォルトでPython入ってないと思うので、pythonをインストール。
hgで取得しても良かったのですが、今回はbitbucketからzipファイルを取得しました。
解凍して、ディレクトリをmemocurialにリネームします。


# apt-get install g++ python-dev
# cd /opt
# wget -O memocurial.zip https://bitbucket.org/troter/memocurial/get/default.zip
# mv troter-memocurial-cefb54568aa5 memocurial




リネームしたディレクトリに移動して、「python bootstrap.py -d」を実行します。


# cd /opt/memocurial
# python bootstrap.py -d
Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.32.tar.gz
Extracting in /tmp/tmpgfPq7c
Now working in /tmp/tmpgfPq7c/distribute-0.6.32
Building a Distribute egg in /tmp/tmpaTvY9j
/tmp/tmpaTvY9j/distribute-0.6.32-py2.6.egg
Creating directory '/opt/memocurial/bin'.
Creating directory '/opt/memocurial/parts'.
Creating directory '/opt/memocurial/eggs'.
Creating directory '/opt/memocurial/develop-eggs'.
Generated script '/opt/memocurial/bin/buildout'.




これでbin/buildoutというスクリプトが生成されました。
このスクリプトを実行すると、必要なモジュールの取得や設定ファイルの生成が行われます。

事前にbuildout.cfgを編集しておけば、生成される設定ファイルの
初期値を変更できるようなので、外部からもアクセスできるようにhostの値を
変更しておきました。



# vi buildout.cfg




[server]のhostを127.0.0.1から0.0.0.0に変更してます。


[server]
#host = 127.0.0.1
host = 0.0.0.0
port = 5000
logfiles = ${buildout:directory}/var/log





編集がおわったら、bin/buildoutを実行します。


# bin/buildout



これでMercurialやFlaskなど必要なモジュールがインストールされます。





ソースの修正



bin/buildoutを実行することで、bin/memocurialが生成されます。
実行してみるとこんなエラーになります。


# bin/memocurial
Traceback (most recent call last):
File "bin/memocurial", line 23, in <module>
    import memocurial.script
File "/opt/memocurial/src/memocurial/__init__.py", line 9, in <module>
    from memocurial.models import *
File "/opt/memocurial/src/memocurial/models.py", line 6, in <module>
    from flaskext.sqlalchemy import SQLAlchemy
ImportError: No module named flaskext.sqlalchemy
root@mantis:/opt/memocurial# bin/memocurial
Traceback (most recent call last):
File "bin/memocurial", line 23, in <module>
    import memocurial.script
File "/opt/memocurial/src/memocurial/script/__init__.py", line 6, in <module>
    from flaskext.script import Command as FlaskScriptCommand
ImportError: No module named flaskext.script





ImportError: No module named sqlalchemy
http://stackoverflow.com/questions/10572498/importerror-no-module-named-sqlalchemy

「flaskext.script」から「flask_sqlalchemy」に変更されたようです。


/opt/memocurial/src/memocurial/script/__init__.py
を開き、該当箇所を修正します。


  1. # -*- coding: utf-8 -*-
  2. import shutil
  3. import os
  4. from subprocess import check_call
  5. from datetime import datetime
  6. #from flaskext.sqlalchemy import SQLAlchemy
  7. from flask_sqlalchemy import SQLAlchemy






修正後、再度実行するとこんなエラーになります。


# bin/memocurial
Traceback (most recent call last):
File "bin/memocurial", line 26, in <module>
    sys.exit(memocurial.script.main())
File "/opt/memocurial/src/memocurial/script/__init__.py", line 82, in main
    from flaskext.script import Manager, Server, Shell
ImportError: No module named flaskext.script





「flaskext.script」から「flask_script」に変更されたようです。
https://github.com/techniq/flask-script

/opt/memocurial/src/memocurial/script/__init__.pyを開き、該当箇所を修正します。

ファイルの先頭


  1. # -*- coding: utf-8 -*-
  2. """Startup utilities"""
  3. import os
  4. import sys
  5. from functools import partial
  6. #from flaskext.script import Command as FlaskScriptCommand
  7. #from flaskext.script import Option
  8. from flask_script import Command as FlaskScriptCommand
  9. from flask_script import Option




80行目付近


  1. # bin/memocurial ...
  2. def main(default_command='runserver', memocurial_config=None):
  3.     """
  4.     console_script entry point
  5.     """
  6.     #from flaskext.script import Manager, Server, Shell
  7.     from flask_script import Manager, Server, Shell






修正後、bin/memocurialを実行するとこんなメッセージが表示されると思います。


# bin/memocurial
Please provide a command:
init-db    Command use for flask-script to initialize the database.
runserver Runs the Flask development server i.e. app.run()
shell     Runs a Python shell inside Flask application context.





データの管理にsqliteを使用しており、最初にデータベースを初期化する必要があります。
-cでproduction.iniを指定してデータベースの初期化実行。


# bin/memocurial init-db -c parts/etc/production.ini



実行すると、/opt/memocurial/production.dbが作成されると思います。


なぜかproduction.iniのhostの指定を採用してくれないので、
-t 0.0.0.0オプションをつけてrunserverを実行し、外部から閲覧できるようにします。


# bin/memocurial runserver -c parts/etc/production.ini -t 0.0.0.0




これでサーバーが起動しました。

http://[サーバーIP]:5000/をブラウザで表示すると、こんな画面が表示されると思います。

145_01.png


テストで投稿してみます。

145_02.png


こんな感じで投稿出来ました。

145_03.png


投稿されている一覧の表示はこんな感じです。

145_04.png


関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2012/12/12(水) 22:58:16|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<GistクローンのHesoをDebianで動かす | ホーム | PasteBinやGistみたいなコードスニペット「stikked」をインストール>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1046-bd38496a
この記事にトラックバックする(FC2ブログユーザー)