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 = '<img src="' . $picOn->getURL() . '" alt="' . $linkTextActive . '"/>';
}
if ($picOff) {
  $linkTextInactive = '<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も増えてますし、管理画面も使いやすくなってますし、進化してますね。
いつまで続くか分かりませんが、技術系の備忘録を中心に個人的なメモとして。