irohiroki's blog

Ruby, Rails, and Web technologies

MacにRVMでRuby 1.9.2をインストールしたとき、irbなどのReadlineのプロンプトに日本語を入力すると「???」に化けて、そのままEnterするとinvalid multibyte charなどのエラーになる問題の解決方法。

Bug #550によると、MacではGNU readlineの代わりにEditline Libraryが使われているそうで、GNU readlineを使えば解決するらしい。

RVMには簡単にGNU readlineを導入する機能があって、Rubyをインストールした後に修正する手順は下の通り(追記:一度Rubyを消さないとうまく行かないので修正。リンク先の丸写しです)。

rvm package install readline

rvm remove 1.9.2

rvm install 1.9.2 --with-readline-dir=$rvm_path/usr

cd $HOME/.rvm/src/ruby-1.9.2-p180/ext/readline

ruby extconf.rb -- --with-readline-dir="$HOME/.rvm/usr"

make install

なお、2行目のruby-1.9.2-p180の部分はインストールしたRubyのバージョンに合わせて変えてください。

追記

GNU readlineにしたら、Readline.refresh_lineがNotImplementedErrorになりました。refresh_lineを使う場合には向きませんね。

Published on 22/03/2011 at 15h25 under . Tags , ,

RSpec勉強会@万葉で発表してきたので、資料を公開します。

RSpecを2ヶ月くらい使って気づいた事と分からない事

資料の22ページで、subjectのためにdescribeを切ることについて「議論ありそう」と書いたんですが、やっぱり@ukstudioさんからツッコまれました。

曰く、describeは振る舞いの主体を表すもので、処理の結果を指すものではないでしょうとのこと(と理解した)。確かにそうですね。

しかし同じcontextでsubjectを変えると書きやすくなる場合もやっぱりあって、この問題はまだまだ楽しめそうです。

Published on 08/03/2011 at 01h05 under . Tags ,

HerokuRack専用のホスティングサービスで、Gitでpushすることでデプロイできるという特長があります。

ところが、git pushはブランチのヒストリを全て転送するため、実際のデプロイメントに必要ない過去のファイルも転送されてしまい、無駄です(バックアップとして使えるという考え方もあると思いますが、その目的であれば他にもっと効率的な方法があります)。

ここではGit 1.7.2の新しい機能を使って、実際のデプロイメントに必要なファイルだけをpushする方法を説明します。

Git 1.7.2では、checkoutコマンドに--orphanというオプションが追加されました。

* "git checkout --orphan newbranch" is similar to "-b newbranch" but prepares to create a root commit that is not connected to any existing commit.

つまり、--orphanを付けて新しいブランチを作ることで、ヒストリから切り離されたコミットを作ることができます。例えば以下のようにdeployというブランチを作ると、checkoutしたファイル(ここではREADMEのみ)が全てnew fileとしてステージされた状態になります。

$ git checkout --orphan deploy
Switched to a new branch 'deploy'
$ git status
# On branch deploy
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#
#       new file:   README
#

ここでcommitすればdeployブランチ唯一のコミットができます。

$ git commit -m 'for deployment.'
[deploy (root-commit) 38bbc6b] for deployment.
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 README

show-branchすることで、既存のブランチから完全に切り離されていることが分かります。

$ git show-branch
* [deploy] for deployment.
 ! [master] initial commit.
--
*  [deploy] for deployment.
 + [master] initial commit.

このdeployブランチをherokuへpushするには、以下のようにします:

$ git push heroku deploy:master

転送するオブジェクトは最小で済むはずです。

Published on 02/08/2010 at 01h40 under . Tags , ,

Powered by Typo – Thème Frédéric de Villamil | Photo L. Lemos