2010年4月18日日曜日

ゼロから構築するrails環境

以前のPOSTを整理しました。
CentOS にrailsインストール

CentOS5.4にrails環境を構築します。
エディタ以外のライブラリはインストールしていない空の状態からスタートです。
※BaseとEditorsパッケージのみインストール
全部rootで作業します。
root以外の場合は、必要に応じてsuして下さい。

■目標

1. Rubyのインストール
2. gemからrailsのインストール
3. プロジェクトの作成とDB設定、サーバ起動


■すること

0. 前準備

yumではruby1.8.5までしかインストールできませんが、最新のgemsではruby1.8.6以上が要求されるので、ソースからrubyをインストールします。
RPMパッケージを作成するために予めcheckinstallを導入します。

1. Rubyのインストール

rubyをソースからインストールします。

2. gemsとrailsのインストール

rubyのパッケージ管理ツールであるgemsをインストールし、gems経由でrailsをインストールします。

3. Mysqlのインストールとrails起動

Mysqlをインストールした後、railsプロジェクトを作成。
railsプロジェクト用のDB設定を行った後、webrickサーバを起動し、railsアプリケーションにアクセスします。


■前準備

gccのインストール。yumのアップデート。

$ yum install gcc
$ yum update

checkinstallのインストール。
※参考
http://herr0s.hp.infoseek.co.jp/checkinstall.html

# 依存ライブラリのインストール
$ yum install rpm-build
# checkinstallのインストール
$ cd /tmp/
$ wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz
$ tar xzvf checkinstall-1.6.2.tar.gz
$ cd checkinstall-1.6.2
$ make
$ make install
# checkinstall自体をパッケージ管理
$ which checkinstall
$ /usr/local/sbin/checkinstall
# RPMパッケージの作成
# **********************************************************************
# 
#  Done. The new package has been saved to
# 
#  /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm
#  You can install it in your system anytime using:
# 
#       rpm -i checkinstall-1.6.2-1.x86_64.rpm
# 
# **********************************************************************
$ rpm -Uvh /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm


■rubyのインストール

※2010-11-24追記
この記事の本文記載の操作を行う限りにおいては問題ないと思いますが、Redmine導入時などにSSL関係のロードが上手くいかないことがあります。
最新のパッチレベルのソースを利用されることをお勧めします。
現時点での1.8.7系の最新は「ruby-1.8.7-p302」です。

# 依存ライブラリのインストール
$ yum install zlib-devel
$ yum install openssl-devel
# rubyインストール
$ cd /tmp/
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz
$ tar xzvf ruby-1.8.7-p249.tar.gz
$ cd ruby-1.8.7-p249
$ ./configure --prefix=/usr
$ make
$ checkinstall --fstrans=no
# **********************************************************************
# 
#  Done. The new package has been saved to
# 
#  /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p249-1.x86_64.rpm
#  You can install it in your system anytime using:
# 
#       rpm -i ruby-1.8.7-p249-1.x86_64.rpm
# 
# **********************************************************************
$ rpm -Uvh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p249-1.x86_64.rpm
$ ruby -v
# ruby 1.8.7


■gemsとrailsのインストール

gemsもRPM化したかったんですが、エラーが出てパッケージができません。
※参考
http://moimoitei.blogspot.com/2008/08/centos-52-ruby.html
http://blog.livedoor.jp/tsuchy_h231/archives/50486570.html
http://d.hatena.ne.jp/varlog/20090307/1236380738

checkinstall -R "ruby ./setup.rb"
とすると、
/var/tmp/tmp.pptES10730/installscript.sh: line 4: ruby setup.rb: command not found
なんてエラーが出て進まなかったので、保留。
単にsetup.rbを実行することに。

$ cd /tmp/
$ wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz
$ tar xzvf rubygems-1.3.6.tgz
$ cd rubygems-1.3.6
$ ruby setup.rb
$ gem -v
# 1.3.6

# railsのインストール
$ gem install rails


■Mysqlのインストールとrails起動

tmpディレクトリにrailsプロジェクトを作成し、DBと接続、サーバ起動まで。

Mysql関連初期設定

# DBとライブラリのインストール
$ yum install mysql-devel mysql mysql-server
$ gem install mysql
# 初期設定
$ mysql_install_db

railsプロジェクト作成

$ cd /tmp/
# mysql指定でdemoプロジェクト作成
$ rails -d mysql demo

rails -d mysql demo
コマンドを実行すると、./demoディレクトリが作成され、
localhostのMysqlのdemo_developmentデータベースをrootユーザ、空パスワードでアクセスするデフォルトのDB定義ファイルが作成されます。
必要に応じてDB定義ファイルを変更して下さい。

DB作成やリモートアクセス許可

# rails用DB作成
$ mysql -u root -p
mysql> create database demo_development;
mysql> exit
# リモートアクセスの許可
$ service iptables stop
# 必要に応じてrailsのDB設定を変更
# vi /tmp/demo/config/database.yml
# webrickサーバ起動
$ ruby demo/script/server

http://host:3000/
にアクセスして起動確認。
About your application’s environment
リンクをクリックしてみて情報が表示されていれば、DBとも接続できている。

2010年4月7日水曜日

ERP5をインストールしてみる、の巻き。

知ってる人は知っているフランス生まれのオープンソースのERPパッケージ「ERP5」。
http://www.erp5.org/

開発者(というかCTO)にGRUBの奥地さんがいらっしゃる(いらっしゃった?)ことでも有名。

日本でも事業展開されているようです。
http://www.nexedi.co.jp/

ぶーとろーだーと言えばGRUB。
GRUBと言えばぶーとろーだー。

何だかすごそうっぽいことだけは分かるんですが、ブートローダーが具体的に何をしているのかもよく知りません。
数年前にノートPCにfedoraとwindowsのデュアル環境を構築した際にGRUBさんにはお世話になった記憶がありますが、今の自宅サーバのブートローダーが何なのかも知らない。
そんな私ですが、奥地さんにはお会いしたいしてみたいなー。

やや脱線気味ですが、本題のERP5のインストール。

ERP5は(ほぼ)pythonで書かれており、ZepoというWEBサーバが必要になるようです。
またMandrivaというLinuxディストリビューション上で構築するのが正しいスタイルであるようです。

でもMandrivaLinuxって聞いたこともなかったですし、馴染みのある、CentOSで構築したいじゃない?
(動作確認のために構築したかっただけだし・・・)

MandrivaもRedHatベースのようなんで何とかなるかな、と思って作業し出したのですが、結論から言うと素直にMandrivaにするべきです。
CentOSでの構築方法は全然見つからない。日本語情報はもちろん、英語の情報も全然見つからない。
ERP5のオフィシャルページにもMandriva前提のurpmiコマンド(yumっぽいやつらしい)なんかで説明してあって全然参考にならない。

オフィシャルページには何通りかの構築方法が紹介されていますが、CentOSユーザにはソースをコンパイルする選択肢しかありません。
http://www.erp5.org/Download

コンパイルと言っても、パッケージやインストーラなどが提供されているので慣れれば簡単に構築できると思いますが、コマンドを実行する階層がずれれば続行できなくなったりするなど、なかなか手強いです。


■まず、インストーラを使う方法。

CentOSでは上手く行かない部分があって、結局諦めましたが、ディストリビューションによってはインストーラの使用がもっとも楽だと思います。

http://www.erp5.org/DownloadERP5Installer
ま、ここに書かれている通りなんですが、glibcのバージョンに注意して構築を始めます。

$ tar xzvf erp5-installer
$ cd erp5installer/
$ ./install.sh

 ----------------------------------
|  Checking for required packages  |
 ----------------------------------
Checking for ImageMagick...........Not Installed
Checking for pdftk.................Not Installed
Checking for pdftohtml.............Not Installed
Checking for xpdf..................Not Installed
Checking for MySQL server..........OK

色々と必要なライブラリがあります。
地道に入れていきます。

ImageMagick
http://www.imagemagick.org/script/index.php

pdftk
http://www.accesspdf.com/pdftk/

pdftkはCentOS標準のyumリポジトリにないのでrpm登録。
※参考
http://d.hatena.ne.jp/scientre/20090523/pdftk
※アーキテクチャに注意すること。リンク先はi386、x86は下記rpm。

pdftohtml
http://pdftohtml.sourceforge.net/

$ yum install ImageMagick
$ rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
$ yum install pdftk
$ yum install pdftohtml
#poppler-utilsがインストールされる

ここまでは良かったんですが、この後のxpdfがCentOSにはキツイです。

xpdfはforkしてpopplerというライブラリになったようなのですが、popplerをインストールしてもERP5のインストーラは動いてくれません。
上記pdftohtmlのインストールでpopplerはインストールされているのですが、それでも駄目だと言われます。

yumでxpdf探してもCentOSにはありません。

CentOS用にFedoraのライブラリを提供してくれているサイト(http://centos.karan.org/)のパッケージも見てみましたがxpdfは無いようです(2010/04/07時点)。

CentOS用のxpdfインストールパッケージを書いてくれている人も居るようですが、インストールディレクトリのパスが通らないようで動きませんでした。
http://computingfunnyfacts.blogspot.com/2008/11/xpdf-in-centos.html

仕方がないのでソースからインストールしようとしましたが、Xが必要だとか言われてコンパイルできませんでした。
結局諦めたのですが、途中までの手順です。

※参考
http://install.pocari.org/xpdf-3.html

依存ライブラリインストール
$ yum install freetype
$ yum install t1lib
リンク先のようにyumではなくソースからインストールすると通るのかもしれない。

ソースの取得とパッチの適用からインストールまで

$ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02.tar.gz
$ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl1.patch
$ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl2.patch
$ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl3.patch
$ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl4.patch
$ tar xzf xpdf-3.02.tar.gz
$ cd xpdf-3.02
$ patch -p1 < ../xpdf-3.02pl1.patch
$ patch -p1 < ../xpdf-3.02pl2.patch
$ patch -p1 < ../xpdf-3.02pl3.patch
$ patch -p1 < ../xpdf-3.02pl4.patch
この後、いつものように./configureするのですが、オプションの設定がよく分かりませんでした。
※freetype-develとt1lib-develを入れればよかったのかも。

オプション指定せずに./configureしてみたところ、X関係が必要だとかで進みませんでした。

$ yum groupinstall "X Window System"

してみても駄目。結局諦めちゃいました。


■Buildoutを利用する方法

今後、現行のRPMでのインストールなどもbuildoutというインストールシステムへ移行するようです。
http://www.erp5.org/HowToUseBuildout

色々と試してみましたが最終的にはこの方法でインストールしました。
ただ、この方法でZepoサーバも同時にインストールされるはずなんですが、これまでの格闘の際にインストールしていた別のZepoサーバのファイルを参照しにいったりするような構成が出来上がってしまっていまして、ちゃんと切り分けて整理できていない部分もあります。
お約束ですが、試してみる際は、無保証自己責任でお願いします。

上記リンクに「Dependencies:」との記載がありますが、CentOSでは全然上手くいきません。
トライアンドエラーの結果、以下のライブラリをインストールすればコンパイルできるようになりました。
※多分必要ないのもある。もしかするとメモし忘れてるのもあるかもしれない。

$ yum install python-devel
$ yum install glib-devel
$ yum install glib2-devel
$ yum install glibc-devel
$ yum install cyrus-sasl-devel
$ yum install cyrus-sasl-devel
$ yum install openldap-devel
$ yum install libxml2-devel
$ yum install libxslt-devel
$ yum install subversion-devel
$ yum install gcc-c++
$ yum install neon-devel

buidoutパッケージを任意の場所に配置しますが、配置した場所がZepoサーバのインストール先になるので適当な場所にして下さい。

またここから先はroot以外での作業をお勧めします。
最後、サーバを立ち上げる時にrootでは実行できません。
一般ユーザでサーバ起動コマンドを実行しないとエラーになります。
rootでインストールしてしまうと、ファイルのパーミッション変更などが大変です。

$ svn co https://svn.erp5.org/repos/public/experimental/erp5.buildout/
$ cd erp5.buildout/

#MySQLの接続情報を設定ファイルに記述

$ vi buildout.cfg

[buildout]
extends = profiles/development.cfg

[create_erp5_site]
# modify this to reflect your local mysql configuration
# Format:
#     database[@host[:port]] [user [password [unix_socket]]]
#   e.g "erp5db erp5user somepassword" or "erp5db erp5user"
- erp5_sql_connection_string = erp5 erp5user
+ erp5_sql_connection_string = erp5 erp5 erp5
#「erp5_sql_connection_string = 」の後に、DB名、ユーザ名、パスワード
# database[@host[:port]] [user [password [unix_socket]]]

$ python2.4 bootstrap/bootstrap.py
$ python2.4 ./bin/buildout
#cd ./bin
#python2.4 ./buidout
#とかすると動作しない

これでがちゃがちゃコンパイルしてインストールが始まります。
WARNING出し続けながら数十分掛かってインストールが完了します。

インストールが完了すれば、パッケージ直下から以下のコマンドでサーバが起動。

$ ./bin/zopectl fg

上手く行っていれば
http://host:18080
でZepoにアクセスできるはずです。

2010年3月24日水曜日

Aptana、RadRailsインストールでrackが入らない。

WinXP環境のeclipseでAptanaのRadRailsプラグインをインストール後、Auto-install gemsでエラー。
rack requires test-spec (>= 0)
とのことで、rackがインストールできず、rackがなければactionpackもactionmailerもインストールできず、結局railsが入らない、と。

何となく困った時のアップデート。

# gem update

更新無いって。
コマンドプロンプトでtest-specを入れてみる。

# gem install test-spec
ERROR:  could not find gem test-spec locally or in a repository

リポジトリに無いだと・・・。
gemのリポジトリってどうやって操作するんだろ?
ググってみたものの分からず。

gem入れ替えようと思ってバージョン確認してみたら、何か古い。

# gem -v
0.9.4

最新は1.3.6なので、gem自体を更新。

# gem update --system

OKっぽい。
これでもう一度更新かけてみると、山ほど更新が落ちてくる。

# gem update

'nmake'コマンドがないよ、とか言われるけど、出来てるっぽい。
update完了後、radrailsのAuto-installを実行してみたら通りました。
Auto-install後、もう一度updateかけた方がいい。

2010年3月23日火曜日

CentOSにrailsインストール

===============
2010-04-18追記
まとめました。
ゼロから構築する rails環境
===============

いつもの通りにCentOSにrailsを入れようかな~、フンフン♪~、と思って構築しだしたのですが、何か大変だったのでメモ。(全部rootで作業してます。)

ほとんどまっさらのCentOSにyumでrubyインストールしてgems入れようとしたら面倒でした。

# yum install ruby ruby-devel rdoc
# wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz
# tar xzf rubygems-1.3.6.tgz
# cd rubygems-1.3.6
# ruby ./setup.rb
ERROR:  Expected Ruby version >= 1.8.6, is 1.8.5

rubyが1.8.6以上でないとダメらしい。
gems1.3.4までは通ってたと思うので、1.3.5か1.3.6からruby1.8.6以上が必要になったっぽい。
困ったことにyumでは1.8.6取れないので、ソースから1.8.7インストール。

# ruby -v
ruby 1.8.5
# yum remove ruby
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz
# tar xzf ruby-1.8.7-p249.tar.gz
# cd ruby-1.8.7-p249
# ./configure --prefix=/usr
...
configure: error: no acceptable C compiler found in $PATH
...

コンパイラも無いって言うから、gccいれてインストール続行。

# yum install gcc
# ./configure --prefix=/usr
# make
# checkinstall --fstrans=no
-bash: checkinstall: command not found

今度はcheckinstallが無いのか。

# yum install checkinstall
No package checkinstall available.

コンパイルしろってか。

# wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz
# tar xzf checkinstall-1.6.2.tar.gz
# cd checkinstall-1.6.2
# make
# make install

OK。
ちゃんとRPMパッケージ作っとかないとね。
後々大変だから!

# cd /tmp/ruby-1.8.7-p249
# ./configure --prefix=/usr
# make
# checkinstall --fstrans=no

あれ?RPMパッケージできてこない・・・。
よく見たら、rpmbuildがないとエラーが。。

*** The "rpmbuild" program is not in your PATH!
*** RPM package creation aborted

で、よく考えたらcheckinstall自体のパッケージ作るのも忘れてた・・・。
make installは通ってるみたいだし、もういいや。
(yum install rpm-buildすればOKみたい。)

# ruby -v
ruby 1.8.7
# cd /tmp/rubygems-1.3.6
# ruby ./setup.rb
RubyGems 1.3.6 installed
# gem install rails
`gem_original_require': no such file to load -- zlib (LoadError)

またエラーが。今度はzlibがロードできないと。。
zlibへのパス通してまたmakeやり直し・・・。

# cd /tmp/ruby-1.8.7-p249/ext/zlib
# ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib
checking for deflateReset() in -lz... no
checking for deflateReset() in -llibz... no
checking for deflateReset() in -lzlib1... no
checking for deflateReset() in -lzlib... no
checking for deflateReset() in -lzdll... no

何これ?zlibないの?

# yum install zlib
Package zlib-1.2.3-3.i386 already installed and latest version
Nothing to do

あるって言ってるよ?

# yum list | grep zlib
...

何か色々出てきた。それっぽいzlib-develをインストールしたらOKだった。

# yum install zlib-devel
# ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib=/usr/lib
# make
# make install
# gem install rails

ここまでの流れ、ここにも書いてた。
http://d.hatena.ne.jp/akm/20090410/1239353348

次回の時のためのメモ

・rpm-buildをインストールして、checkinstall用意。
・yumのrubyはもう使えない。
・rubyコンパイル時にzlibロードすること。

=== 追記 ===

rails環境構築の道は険しい。

・サーバ起動でエラー

no such file to load -- openssl.so

OpenSSLライブラリがロードできてない。

# yum install openssl-devel
# cd /tmp/ruby-1.8.7-p249/ext/openssl
# ruby extconf.rb --with-openssl-dir=/usr/local/ssl
# make
# make install

・mysql接続でエラー

no such file to load -- mysql

MySQLライブラリがロードできてない。
mysqlドライバも入れてなかった。

# yum install mysql-devel
# gem install mysql

あれ?素直に一発OK。
以前は通らなくて大変だった記憶が・・・。
gemもmysqlドライバもバージョンアップされてるみたいですし、通るようになったのかな?

一応その時の手順。

gemのMySQLドライバのインストール先調べて再コンパイル
# gem env
- GEM PATHS:
 - /usr/lib/ruby/gems/1.8
# cd /usr/lib/ruby/gems/1.8/gems/mysql-2.8.1/
# which mysql_config
/usr/bin/mysql_config
# ruby extconf.rb --with-mysql-config=/usr/bin/mysql_config
# make
# make install

mysql-2.8.1パッケージにはextconf.rbが見つからない。
よく分からないけど素直に通ったので良しとすることに。

2010年3月10日水曜日

Concrete5のメニューを画像に

Concrete5
http://concrete5-japan.org/
http://www.concrete5.org/

Concrete5すばらしいプロダクトだと思うのですが、プラグインが少なかったり日本語情報が少なかったりしてまだまだ使い辛い。

標準でautonavというメニュー生成のblock(機能)が提供されているのですが、メニューを画像に変更することがどうやらできない(のか?)。

メニューを固定で編集してしまうことは容易なのですが、せっかくのCMSなんで、もう少しスマートに解決したい。

ということで、autonavのカスタムテンプレートとして対応する方法をご紹介。

Image Navigation Items

詳しくはリンク先を参照して頂いて、以下、要点のみ。

1. ページ追加属性追加

「ページとテーマ」>「ページタイプ」>「ページ属性情報追加」
から「ファイル/画像」形式で通常状態のメニュー画像と当該画面表示中のメニュー画像を設定する属性を追加。

2. 画像設定

ページ編集画面の「ページ設定」>「カスタム項目」から1.で設定した画像設定項目を追加して、ファイルを設定。

3. カスタムテンプレート追加

autonavのカスタムテンプレートを追加する。

/concrete/blocks/autonav/view.php
を
/blocks/autonav/templates/image_navigation.php
などとして、編集

$linkTextActive = $ni->getName();
$linkTextInactive = $ni->getName();
 
$picOn = $_c->getAttribute('pic_on');
$picOff = $_c->getAttribute('pic_off');
 
if ($picOn) {
  $linkTextActive = '&#60;img src="' . $picOn->getURL() . '" alt="' . $linkTextActive . '"/>';
}
if ($picOff) {
  $linkTextInactive = '&#60;img src="' . $picOff->getURL() . '" alt="' . $linkTextInactive . '"/>';
}
 
if ($c->getCollectionID() == $_c->getCollectionID()) { 
 echo('
<li class="nav-selected nav-path-selected"><a class="nav-selected nav-path-selected" href="' . $pageLink . '">' . $linkTextActive . '</a>');
} elseif ( in_array($_c->getCollectionID(),$selectedPathCIDs) ) { 
echo('
<li class="nav-path-selected"><a class="nav-path-selected" href="' . $pageLink . '">' . $linkTextActive . '</a>');
} else {
echo('
<li><a href="' . $pageLink . '">' . $linkTextInactive . '</a>');
}

4. カスタムテンプレート適用

画像メニューを表示させたいautonavブロックをクリックして「カスタムテンプレート」適用

2010年3月9日火曜日

ソースコード表示テスト

Bloggerでも、コードハイライトしてみる。by google-code-prettifyより

Javaのソース
/**
  * SELECTクエリ実行
  * @return ResultSet 結果セット
  */
 private ResultSet executeSelectForBigTable() {
  Query query = new Query(kind);
  List preparedConditions = preparedOption.getPreparedConditions();
  for (PreparedCondition preparedCondition : preparedConditions) {
   query.addFilter(preparedCondition.getName(), preparedCondition.getOperator(), preparedCondition.getValue().toString());
  }
  return new ResultSet(getDatastoreService().prepare(query).asIterable(), preparedOption);
 }

ブログはじめます

最後にブログ書いたのは数年前ですが、ASPも増えてますし、管理画面も使いやすくなってますし、進化してますね。
いつまで続くか分かりませんが、技術系の備忘録を中心に個人的なメモとして。