Archive for 11月, 2010

Nginx+Passengerで、WordPressを「本当に」動かす

Time to Read

6~8分

結論を最初に

  • 一部機能を除いて動きました。
  • 今のところ、画像アップロードが動きません。。

経緯

Read the rest of this entry »

 

etckeeperのつかいかた(インストール、サブコマンド追加)

Time to Read

2分

etckeeperと言うものがあり、要するに /etc 以下をリポジトリにして変更履歴を管理してくれる、大変大雑把と言えば大雑把なソフトウェアがあります。大雑把ですが、結構便利です。

インストール

1
sudo aptitude install git-core etckeeper

そしたら、 /etc/etckeeper/etckeeper.conf と言う若干くどい名前の設定ファイルを編集。

1
2
3
4
5
# The VCS to use.
#VCS="hg"
VCS="git"
#VCS="bzr"
#VCS="darcs"

Gitの他、MercurialやBazaarなんかが使えます。ただし、Subversionなどのような、中央リポジトリが必要なバージョン管理システムは使えませんね(ローカルにコミットしていくため)。

VCSを決めたら:

1
2
sudo etckeeper init
sudo etckeeper commit

使い方

勝手にバージョン管理するんで、特にとりたててすることは無いです。

それで終わってもアレなので、、コミットのタイミングは主に以下の2点です。

  1. aptitudeの操作
  2. 日付が変わったとき

たとえばaptitude installしたりすると自動で変更をコミットしてくれます。また、 /etc/cron.daily/etckeeper というジョブがインストールされて、毎日変更をチェックし、変更があれば自動コミットします。

手動で /etc の変更をコミットしたい場合は:

1
sudo etckeeper commit "message"

サブコマンドの追加

/etc/etckeeper/ 以下には、commit.d、init.d、unclean.dなどのディレクトリがあり、サブコマンドcommit、init、unclean…といった感じで対応しています。そのサブコマンドを発行すると、 ${SUBCOMMAND}.d/ 以下の実行スクリプトを順次実行していきます。

たとえば、/etc/etckeeper/log.d と言うディレクトリを作れば、 etckeeper log と言うサブコマンドが利用できるようになります。 /etc/etckeeper/log.d/10LOG と言うシェルスクリプトを以下のように作成してみましょう。

1
2
3
4
5
6
#!/bin/bash
git --git-dir=/etc/.git log \
    --graph \
    --all \
    --color \
    --pretty='%x09%h %cn%x09%C(yellow)(%cr)%Creset%x09%s %Cred%d%Creset'

これで:

Logを見るのが楽になりました。etckeeper自体は微妙に機能不足感は否めませんが、大雑把な仕組みだけあって大雑把に機能追加出来ます。活用しましょう。

ちなみに、git --git-dir=/etc/.git log の順番でないと動きません。。。しばらく、動かないスクリプトを載せていて失礼しました(19:33修正)。

なお、上述のカラフルなGit logのフォーマットは、以下のサイトを参考にさせていただいております。

ドキュメントなど

 

ServersMan@VPSのDebianをSqueezeにした。

Time to Read

1分

先日言ったとおり、サーバの引越しを完了させた。

ServersMan@VPSのStandardプランでやっている。ServersMan@VPSは最安値で490円/月だったり、2ヶ月無料キャンペーンをやっていたりするにも関わらずDebianが使えるので、apt信者の人でも安心して使えると思った。

とはいえ、契約初期状態ではDebianはlennyのリポジトリを向いている。これを、squeezeに向けて、なるべく最新のソフトウェアを使えるようにする(以下の方法はサポート対象外の手順なので、自己責任で!)。

手順は簡単で、 /etc/apt/sources.list を、「Debian JP Project – ミラーサイトについて」を参照しつつ例えば以下のようにする(バックアップは取っておこうね!)。

1
2
3
4
5
6
7
8
9
deb http://ftp2.jp.debian.org/debian squeeze main contrib non-free
 
deb http://security.debian.org/ squeeze/updates main contrib non-free
 
# Uncomment if you want to use Debian volatile stable updates
#deb http://ftp2.jp.debian.org/debian-volatile squeeze/volatile main contrib non-free
# Uncomment if you want the apt-get source function to work
#deb-src http://ftp2.jp.debian.org/debian squeeze main contrib non-free
#deb-src http://ftp2.jp.debian.org/debian-volatile squeeze/volatile main contrib non-free

ちなみに初期段階ではセントラルに向いててヘヴィなので、ついでに日本のサーバに向けておく。

debian-volatileは、現状squeezeがテスト段階である以上、当然まだ使えない。あと、deb-srcについては、aptitude updateが重くなるし、必要になってからアンコメントすればいいと思う。

上記の設定をしたら、まず、aptdpkgaptitudeだけ最新の状態にする。また、初期状態ではlocaleが変な感じなので再設定。

1
2
3
sudo aptitude update
sudo aptitude install apt dpkg aptitude locales
sudo dpkg-reconfigure locales

dpkg-reconfigureで「ja_JP.UTF-8 UTF-8」を頑張って探して設定。これで、aptitude installしてもロケールまわりで変な警告が出ることがなくなる。

そして、

1
sudo aptitude full-upgrade

それなりに長いこと掛かるが、帯域は思ったより広いのでものすごく長くは掛からない。多分、何度も何度も「パッケージメンテナのバージョンをインストールして置き換えますか?」みたいな質問が出てくるが、「N」を選んだほうがいいと思う。

終わったら、ドキドキしながら:

1
sudo shutdown -r now

再び上がってくるまでお茶でも飲みながら待つ。上がらなかったら、管理画面から上げよう。それでも上がらなかったら、初期化しよう。。。

うまくいけば、これでsqueezeのリポジトリからより新しいソフトウェアが利用できるようになる。ちなみに、僕はアップデートする前にもうapache2を削除してしまっているので、squeezeでもServersManが利用できるかどうかはよく分からない。

現状、squeezeのリポジトリでは、例えばRubyなら1.9.2が、MySQLなら5.1.49が入る。lennyもいい加減リリースされて経つし、squeezeは年内には正式版になるようなので、個人利用ぐらいならこの辺で乗り換えてもよいんじゃないかと思った。

Thanks to:

 

Sinatraで、$SINATRA_ROOT/lib 以下のライブラリをautoloadしたい

Time to Read

1分

地味にどこにも情報がないんでここにメモしときます。

以下のようなディレクトリ構成のSinatraアプリを考えます。

$ tree .
.
|-- Gemfile
|-- Gemfile.lock
|-- app.rb
|-- config.ru
|-- lib/
|   |-- hoge.rb
|   `-- zzzzz.rb
|-- log/
`-- tmp/

この lib/ 以下で定義したクラス/モジュールについて、Rails風に、明示的にrequireしないでも、

1
2
3
class App < Sinatra::Base
  register Hoge # <- ここ
end

って書けばロードしてくれるとうれしいな~と思ったんですが、以下のように設定すると出来ました。

  • app.rb
1
2
3
4
5
6
7
8
9
require 'sinatra/base'
$LOAD_PATH << File.dirname(__FILE__) + "/lib"
 
require 'active_support/dependencies'
ActiveSupport::Dependencies.autoload_paths << File.dirname(__FILE__) + "/lib"
 
class App < Sinatra::Base
  register Hoge # <- autoload
end
  • config.ru
1
2
3
4
5
6
7
require 'rubygems'
require 'bundler'
 
Bundler.require
 
require File.dirname(__FILE__) + '/app'
run App

ポイントとして、

  • require 'active_support/dependencies' は明示的に宣言する(require 'active_support/all' では読まれない!)
  • $LOAD_PATHActiveSupport::Dependencies.autoload_paths 両方にPATHを追加する

と言うことが挙げられます。むろん、同じような設定はどういうフレームワークでも可能だと思います。少し複雑になってくると require も面倒だと思うので、参考にしてください。

 

Gitユーザのための、Bitbucket+Mercurial経由でのデプロイ方法

Time to Read

5分

Why Mercurial & Bitbucket

Mercurialとは

Gitっぽい分散型バージョン管理ツール。Python界隈でよく使われているらしい。コマンドは hg

Bitbucketとは

Mercurialを利用する、リポジトリホスティングサービス。簡単なWikiやトラッカも付く。無料利用可能。


ウェブサービスかなんかをデプロイする際、Capistranoなどが便利だけれど、Capistrano経由のデプロイではリポジトリが存在しないと旨味が少ない。この時、まあ、Webサーバと同じサーバに公開リポジトリを作るよりは、外部のリポジトリホスティングとかを頼りたいよね、と言う話。

Githubと言う最強のホスティングサービスでGitを使ってもいいけど、今回紹介するBitbucketは「無料でプライベートリポジトリが作成可能」なので、色々都合がいい場合が多い。ということで、Bitbucketを利用するための最低限のMercurialの使い方を紹介。

リポジトリをGit -> Mercurialに変換

Read the rest of this entry »