最近ようやく自作のアプリのいくつかをiPadに対応させました。たとえば一挙に韓国語翻訳などです。
新たにiPad miniなるものが世に出るということで、これの対応も考えなくてはいけないのかと思って、Mac App StoreでXcodeのアップデートを確認して見ましたが、リリースはありませんでした。
これからアップデートがあるかもしれないと思って調べてみたのですが、どうやらiPad mini対応をする必要はまったくなさそうです。シミュレータは新しいのが出るでしょうが、Xcodeの更新はないでしょう。
なぜかというと、iPad miniは画面のサイズがこれまでよりも小さい7.9インチになるものの、画素数はiPad 2と同じ1024×768ドットだからです。つまり、ボタンなどのコントロールや文字がちょっと小さく表示されるだけで、他は従来のiPadなんら変わるところはないということになります。これまで動いていたプログラムは、少しちいさくなった画面の中でまったく同じように動くことでしょう。
2012-10-12
DjangoにDBのマイグレーションを行うプラグインを入れる
Djangoで manage.py syncdb をした場合、すでに存在するテーブルについては何も変更されません。models.pyをいじってスキーマを変更しても、それがDBに反映されません。
そこで、マイグレーションを行うプラグインの出番となります。どうもSouthが定番のようなので、これを入れます。
$ sudo pip install South
インストールに成功したら、settings.py を若干変更します。
settings.py の編集が終わったら、普通に、manage.py syncdb をします。これによって、southが利用するDBのテーブルがつくられます。SOUTH_MIGRATION_MODULESを明示的に指定した場合は、親となるモジュール(上記の例ではmigrations)が存在しないとエラーになるので、ここでつくっておきます。ここまでできたら、
$ python ./manage.py convert_to_south myapp
を実行します。これにより、既存のアプリをsouthで管理するように設定できます。今後、モデルに変更があった場合は、
$ python ./manage.py schemamigration myapp --auto
$ python ./manage.py migrate myapp
とやれば、たいていはsouthが何とかしてくれるはずです。
そこで、マイグレーションを行うプラグインの出番となります。どうもSouthが定番のようなので、これを入れます。
$ sudo pip install South
インストールに成功したら、settings.py を若干変更します。
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', #自作のアプリ 'south', #southをインストールする )個人的な趣味としては、
import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), "..", "south_migrations")) SOUTH_MIGRATION_MODULES = { 'myapp': 'migrations.myapp', }という具合にして、マイグレーションのときに生成されるファイルが、プロジェクトのディレクトリの外につくられるようにしておくのがいいと思います。その方が、ローカルのプロジェクトをサーバー上にあげるときに都合がいいからです。
settings.py の編集が終わったら、普通に、manage.py syncdb をします。これによって、southが利用するDBのテーブルがつくられます。SOUTH_MIGRATION_MODULESを明示的に指定した場合は、親となるモジュール(上記の例ではmigrations)が存在しないとエラーになるので、ここでつくっておきます。ここまでできたら、
$ python ./manage.py convert_to_south myapp
を実行します。これにより、既存のアプリをsouthで管理するように設定できます。今後、モデルに変更があった場合は、
$ python ./manage.py schemamigration myapp --auto
$ python ./manage.py migrate myapp
とやれば、たいていはsouthが何とかしてくれるはずです。
2012-10-06
CentOSにPostgreSQLをインストール
yumでインストールします。
の3つがインストールされることになります。現在はバージョンは、8.4.13-1.e16_3です。
これでインストールはできているのですが、データベースサーバーが起動していないので、まだ利用することはできません。最初の起動のため、次の2つコマンドを打ちます。
CentOSを再起動したときにpostgresqlも自動的に起動されるように設定しておきます。
これでデータベースサーバーの起動はOKです。後は、ユーザーの設定を行います。
PostgreSQLのインストールと同時にpostgresというユーザーがつくられるようです。
Ident認証ではなく、パスワード認証に変更したい場合は、postgresqlにユーザーを追加した後で、設定を変更します。
postgresユーザーでパスワード認証を行いたい場合は、次のようにしてパスワードを設定します。
パスワード認証を行うためには、DBの設定も変更する必要があります。設定ファイルなどは、たいてい「/var/lib/pgsql/data/」以下にあるようです。今回修正するのは、
DjangoからPostgreSQLに接続する場合は、データベースの設定に、django.db.backends.postgresql_psycopg2を指定します。さらに次のコマンドで必要なモジュールをインストールしなくてはいけません。
$ sudo yum -y install postgresql-server依存関係により、
- postgresql-server
- postgresql-libs
- postgresql-server
の3つがインストールされることになります。現在はバージョンは、8.4.13-1.e16_3です。
これでインストールはできているのですが、データベースサーバーが起動していないので、まだ利用することはできません。最初の起動のため、次の2つコマンドを打ちます。
$ sudo service postgresql initdbここで、initdbをせずにpostgresqlを起動しようとすると、次のようなエラーになります。
$ sudo service postgresql start
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
[失敗]
CentOSを再起動したときにpostgresqlも自動的に起動されるように設定しておきます。
$ sudo chkconfig postgresql on
これでデータベースサーバーの起動はOKです。後は、ユーザーの設定を行います。
PostgreSQLのインストールと同時にpostgresというユーザーがつくられるようです。
$ id postgresこのユーザー "postgres" にパスワードを設定します。
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres)
$ sudo passwd postgresパスワードが設定できたら、ユーザーを変更します。デフォルトでは、Ident認証という方式で認証を行うため、CentOSのユーザーとPostgreSQLのユーザーが一致していないとエラーになるようです。
$ su - postgres後は、createdbでデータベースを作成したり、 psqlで接続したりできます。
Ident認証ではなく、パスワード認証に変更したい場合は、postgresqlにユーザーを追加した後で、設定を変更します。
postgresユーザーでパスワード認証を行いたい場合は、次のようにしてパスワードを設定します。
ALTER USER postgres WITH PASSWORD 'newpassword';という具合です。postgresユーザーは最初から存在するのでALTER USERですが、新規ユーザーを追加するのであれば代わりに、CREATE USER文を使います。
パスワード認証を行うためには、DBの設定も変更する必要があります。設定ファイルなどは、たいてい「/var/lib/pgsql/data/」以下にあるようです。今回修正するのは、
/var/lib/pgsql/data/pg_hba.confというファイルです。「local all ident」という行をコメントアウトして「local all password」を追加します。
#local all all identこれでパスワードで認証することができます。たとえばユーザーがpostgresのときに、
local all all password
psql -U postgresとやれば、postgresユーザーで接続できます。
DjangoからPostgreSQLに接続する場合は、データベースの設定に、django.db.backends.postgresql_psycopg2を指定します。さらに次のコマンドで必要なモジュールをインストールしなくてはいけません。
$ sudo yum -y install python-psycopg2
2012-10-04
DjangoでImageFieldやFileFieldが空でないか調べる
たとえば、次のようなモデルがあったとします。
ここで、ImageFieldにファイルがセットされているかどうか見分けて処理を切り替えたい場合の判定方法ですが、単に、
class MyModel(models.Model): thumbnail = ImageField(upload_to="path", null=True, blank=True)
ここで、ImageFieldにファイルがセットされているかどうか見分けて処理を切り替えたい場合の判定方法ですが、単に、
m = MyModel.objects.get(id=1) if m.thumbnail: file_is_set() #ファイルあり else: file_is_empty() #ファイルが空という具合に判定すればOKなようです。
2012-10-03
ローカルなプロジェクトを元に共有gitレポジトリを作成する
ローカルに作業していたプロジェクトを管理するgitレポジトリをリモートサーバー上につくるには次のようにします。
まず、サーバー側に、空っぽのgitレポジトリを作成します。
プロジェクトをローカルでもgitで管理していなかった場合は、git initをしてから、サーバーにデータを転送します。
pushするときに「-u」を指定していますが、これは、次回から「git push」だけで「git push origin master」と同じことを実行できるようにするためのものです。
上記は、gitレポジトリをローカルに新規作成する場合ですが、場合によってはすでにgitでプロジェクトを管理しているかもしれません。この場合は、
次のようにしてoriginを書き換えます。
まず、サーバー側に、空っぽのgitレポジトリを作成します。
mkdir repo.git
cd repo.git
git init --bare --shared
プロジェクトをローカルでもgitで管理していなかった場合は、git initをしてから、サーバーにデータを転送します。
cd <path_to_project>みたいな感じにやります。リモートサーバーにはsshで接続するので、「<username>@<host>」の部分は、sshのときと同様にユーザ名とホスト名を指定します。「<path>/repo.git」には、先ほどつくったgitレポジトリへのパスを指定します。
git init
git add .
git commit -m "initial commit"
git remote add origin <username>@<host>:<path>/repo.git
git push -u origin master
pushするときに「-u」を指定していますが、これは、次回から「git push」だけで「git push origin master」と同じことを実行できるようにするためのものです。
上記は、gitレポジトリをローカルに新規作成する場合ですが、場合によってはすでにgitでプロジェクトを管理しているかもしれません。この場合は、
git remote -vとやって、originが設定されているか調べます。originに関する情報が何も出力されなければ、上と同じくgit remote addをすればよいです。しかし、どこかからcloneしたレポジトリの場合は、
origin xxx.git (fetch)というような表示で、originに関する情報が表示されます。この場合は、すでにoriginが設定されているので、
origin xxx.git (push)
次のようにしてoriginを書き換えます。
git remote set-url origin <username>@<host>:<path>/repo.gitこれでoriginが正しく設定されるので、後は
git push -u origin masterを実行すればよいです。
さくらVPS512をセットアップ
昔の書きかけのメモです。いまは、さくらVPS512というプランは無いと思います。
---
当時のさくらの標準のOSは、CentOS 6.2 x86_64 です。git1.7 、python2.6がすでに入っています。
とりあえず、
yum -y update
します。
ユーザーを追加します。「myaccount」の部分がユーザー名です。
adduser myaccount
passwd myaccount
usermod -g apache myaccount
visudo で
myacount ALL=(ALL) ALL
を追加します。
djangoをapacheで動かせるように、mod_wsgiをインストールします。
yum install -y mod_wsgi
pipも、yumでインストールできるようです。
yum install -y python-pip
ただし、yumでインストールした場合は、「pip」ではなく「pip-python」というコマンドを使うことになるようです。
次に、memcachedと、python用のライブラリをインストールします。
yum install -y memcached
yum install -y python-memcached
/etc/httpd/conf/httpd.conf
を編集します。
とりあえず、この時点でどのようなデーモンが入っているかを調べてみます。
httpdとmemcachedが起動するように設定します。
---
当時のさくらの標準のOSは、CentOS 6.2 x86_64 です。git1.7 、python2.6がすでに入っています。
とりあえず、
yum -y update
します。
ユーザーを追加します。「myaccount」の部分がユーザー名です。
adduser myaccount
passwd myaccount
usermod -g apache myaccount
visudo で
myacount ALL=(ALL) ALL
を追加します。
djangoをapacheで動かせるように、mod_wsgiをインストールします。
yum install -y mod_wsgi
pipも、yumでインストールできるようです。
yum install -y python-pip
ただし、yumでインストールした場合は、「pip」ではなく「pip-python」というコマンドを使うことになるようです。
次に、memcachedと、python用のライブラリをインストールします。
yum install -y memcached
yum install -y python-memcached
/etc/httpd/conf/httpd.conf
を編集します。
yum -y update yum install -y mod_wsgi yum install -y python-pip yum install -y memcached yum install -y python-memcached
とりあえず、この時点でどのようなデーモンが入っているかを調べてみます。
$ chkconfig --list abrt-ccpp 0:off 1:off 2:off 3:off 4:off 5:off 6:off abrt-oops 0:off 1:off 2:off 3:off 4:off 5:off 6:off abrtd 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:off 3:off 4:off 5:off 6:off cpuspeed 0:off 1:on 2:off 3:off 4:off 5:off 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off haldaemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off kdump 0:off 1:off 2:off 3:off 4:off 5:off 6:off lvm2-monitor 0:off 1:on 2:off 3:off 4:off 5:off 6:off mdmonitor 0:off 1:off 2:off 3:off 4:off 5:off 6:off memcached 0:off 1:off 2:off 3:off 4:off 5:off 6:off messagebus 0:off 1:off 2:off 3:off 4:off 5:off 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off netfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpdate 0:off 1:off 2:on 3:on 4:on 5:on 6:off irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off kdump 0:off 1:off 2:off 3:off 4:off 5:off 6:off lvm2-monitor 0:off 1:on 2:off 3:off 4:off 5:off 6:off mdmonitor 0:off 1:off 2:off 3:off 4:off 5:off 6:off memcached 0:off 1:off 2:off 3:off 4:off 5:off 6:off messagebus 0:off 1:off 2:off 3:off 4:off 5:off 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off netfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpdate 0:off 1:off 2:on 3:on 4:on 5:on 6:off postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off quota_nld 0:off 1:off 2:off 3:off 4:off 5:off 6:off rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off rngd 0:off 1:off 2:off 3:off 4:off 5:off 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off smartd 0:off 1:off 2:off 3:off 4:off 5:off 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off udev-post 0:off 1:on 2:off 3:off 4:off 5:off 6:off
httpdとmemcachedが起動するように設定します。
$ sudo chkconfig httpd on $ sudo service httpd start $ sudo chkconfig memcached on $ sudo service memcached start
$ chkconfig --list | grep 3:on acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpdate 0:off 1:off 2:on 3:on 4:on 5:on 6:off postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
登録:
投稿 (Atom)