普段はDebianやUbuntuを主に使っているので、 たまにCentOSを使ったりすると、生活必需品のGNU screenで、 なぜか kill (Ctrl+a k) や quit (Ctrl+a \) が使えずに、困っていたのですが、原因がわかったのでメモ。

単純な話で、CentOSのGNU screenパッケージの設定では、 /etc/screenrc のなかで上記のバインディングが 無効化されてしまっているようです。 以下の部分を適当にコメントアウトすればOK。

   1  #remove some stupid / dangerous key bindings
   2  bind k
   3  bind ^k
   4  bind .
   5  bind ^\
   6  bind \\
   7  bind ^h
   8  bind h
   9  #make them better
  10  bind 'K' kill
  11  bind 'I' login on
  12  bind 'O' login off
  13  bind '}' history

CentOSに慣れてないせいか、 あまり"make them better"になってない気がします。 quitが完全に使えないのは辛くないのかな。

posted by Png genki on Sun 15 Jun 2008 at 18:42

Passengerを設定する手順のメモ。

  1. まずはsudo gem install passenger
  2. apacheの設定ファイルに以下を記述
       1  # for Passenger
       2  LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-1.0.5/ext/apache2/mod_passenger.so
       3  RailsSpawnServer /usr/local/lib/ruby/gems/1.8/gems/passenger-1.0.5/bin/passenger-spawn-server
       4  RailsRuby /usr/local/bin/ruby
    
    Ruby Enterprise Edition とかを使う場合は、RailsRubyを切り替えたりしたら良いのかな。 まだ試してないですが、すんなりいけそうな気がします。
  3. VirtualHostの設定
       1  NameVirtualHost *:80
       2  <VirtualHost *:80>
       3    ServerName foobar.com
       4    DocumentRoot /mnt/app/<app_name>/current/public
       5  
       6    (--  snip  --)
       7  
       8    <Directory /mnt/app/<app_name>/current/public>
       9      Options FollowSymLinks
      10      AllowOverride None
      11      Order allow,deny
      12      Allow from all
      13    </Directory>
      14  </VirtualHost>
    

あとはApacheを再起動するだけ。簡単ですね。

posted by Png genki on Sun 15 Jun 2008 at 12:50

SVNリポジトリ上に存在する複数のブランチやtrunkの間で、 変更点をマージしたりする方法のメモです。

まず、これからSVNリポジトリをgit svn cloneすると言う場合は、以下のような オプションを指定して実行します。

   1  git-svn clone http://svn.repos.com/foo -T trunk -b branches -t tags

これで、SVNリポジトリ上のtrunk, branches, tagsをGitのbranchとして全て取り込んだ状態でcloneが実行されます。

git-svnでcloneした既存のWorking copyが手元にあって、 そこに別なbranchやtrunkを追加したい場合は、以下のように.git/config ファイルに項目を加えます。

   1  [svn-remote "svn"]
   2    url = http://svn.repos.com/foo/branches/bar
   3    fetch = :refs/remotes/git-svn
   4  [svn-remote "trunk"]
   5    url = http://svn.repos.com/foo/trunk
   6    fetch = :refs/remotes/git-svn-trunk

下の方が今回追加したものです。 あとは、以下のコマンドを実行してSVNからfetchしてきます。

   1  % git svn fetch trunk

そうすると、以下のようなブランチが作成されます。

   1  % git branch -r
   2    git-svn
   3    git-svn-trunk

ここから先は、普通にGitのbranchとしてmergeすればOKです。

See Also

posted by Png genki on Fri 13 Jun 2008 at 15:50

PassengerのPhusionから、「Ruby Enterprise Edition」なる製品がリリースされたようです。

Ruby Enterprise Edition

Ruby Enterprise Edition is a drop-in, transparent solution for improving your Ruby on Rails website's scalability and performance, while decreasing memory usage.

Railsアプリの動作を高速かつメモリ消費を抑えることができるように チューニングされたRubyのようです。 こちら でtarballが配布されていますね。

以下のような特徴があるようです。

  • Passenger上でのRailsアプリのメモリ使用量を平均33%少なくします
  • 普通のRuby-1.8.6と100%互換性を持っています
  • きちんとテストされていて、非常に安定しています
  • 付属のインストーラで、Linuxのパッケージとおなじぐらい簡単にインストールできます
  • 普通のRubyと共存させることができます。100% self-contained, 0% installation risk!

とのこと。Ruby自体に手を加えるというのは興味深いアプローチですね。

posted by Png genki on Fri 13 Jun 2008 at 10:27

EC2onRailsのAMIイメージはUbuntuのパッケージRubyが入っていますが、 これを最新のruby-1.8.7 p17に置き換える手順のメモです。

  1. 入っているRubygemsを全てアンインストール
  2. rubyをpurge。その結果、
       1  bash: /usr/local/ec2onrails/bin/rails_env: /usr/bin/ruby: bad interpreter: No such file or directory
    
    というエラーが出るようになるが、とりあえず無視。 ruby irb irb1.8 rdoc rdoc1.8 ri ri1.8 ruby1.8-dev このあたりのパッケージを全部削除する。
  3. /usr/local/ec2onrails/bin/rails_env のshbangを/usr/local/bin/ruby に書き換える。
  4. ruby-1.8.7 p17 をソースから入れる
  5. rubygemsをインストール
  6. 必要なGemをインストール

大体こんな感じですね。

posted by Png genki on Thu 12 Jun 2008 at 21:38

以前、動き続ける事を前提としたプログラムについて記事を書き、 Smalltalk勉強会を開催させていただいた事がありました。 その結果、梅澤さんから教えていただいたGemStoneを使ったGLASS (= GemStone, Linux, Apache, Seaside, Smalltalk) というのが面白そうだと思ったのですが、先のRailsConf2008で、 今度はMagLevというのが出てきたそうで、面白そうです。 ということで、情報源をメモしておきます。

名前の通り速さが注目されているようですが、 マルチユーザ環境でSmalltalk的な動作し続ける実行環境を持つ Rubyの処理系という意味で、非常に興味深いです。 今はまだRails等の複雑なRubyアプリケーションは 動かないレベルのようですが、今後に期待ですね。

See Also

posted by Png genki on Mon 9 Jun 2008 at 09:01 with 1 comment

TwhirlからTwitterにPostするのがたびたび失敗するようになったので、 ちょっと変わったタイムラインをもったTwitter的なサービスであるPlurkを使ってみました。

FireShot capture #12 - '3 unread - genki - Plurk_com' - www_plurk_com_user_genki.png

タイムラインの表現方法がなかなか面白いです。

posted by Png genki on Mon 2 Jun 2008 at 11:49

Rails 2.1がリリースされたようです。

Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc

Rails 2.1 is now available for general consumption with all the features and fixes we’ve been putting in over the last six months since 2.0. This has been a huge effort by a very wide range of contributors helping to make it happen.

新しい機能

  • タイムゾーンのサポート
  • Dirty tracking(なんだか面白そう)
  • Gemの依存関係(前々回のRails勉強会でやってたやつ)
  • Named scope
  • マイグレーション番号がタイムスタンプに(UTC-based migrations)
  • キャッシュの改善(Better caching)

なかなか面白そうですね!

posted by Png genki on Sun 1 Jun 2008 at 12:45