※ 結局Rails3アプリケーションを動作させるところまではいけていません…。

-

前回までで、一応CORESERVERにRails3のインストールは完了しました。 rails new testapp などのようにしてアプリケーションの作成までは問題なくできたのですが、generateコマンドを実行しようとしたときにエラーが出てしまいました。

例えば、
rails generate model hoge title:string

としたときに、
'autodetect': Could not find a JavaScript runtime.

というエラーが出ます。

この記事などでは、Gemfileに下記のような記述をしてbundleをし直すことで回避できるとありました。エラー文の中に「See https://github.com/sstephenson/execjs for a list of available runtimes.」とあったので、こちらを参照すると、ExecJSにはランタイムJavascript(RubyからJavascriptを実行するエンジンのようなもの?)が必要で、READMEの中にいくつか候補があり、そのなかにtherubyracerがありました。

gem 'therubyracer'
gem 'execjs'

※ 私の環境ではexecjsは、はじめからバンドルされていたので、2行目は省略しました。
Gemfileを上書き保存したら、下記を実行します。
bundle install

が、私の環境ではbundle show で確認すると、きちんと2つともバンドルされているはずなのに同じエラーが出ました。「therubyracer」が、どうもうまく読み込めていないのかもしれません。他の記事を参考に、Node.jsを入れてみるとうまく行きました。

Node.jsのインストール
cd ~
mkdir lib/nodejs
cd tmp
git clone http://github.com/ry/node.git
cd node
export PREFIX=~/lib/nodejs
./configure
make
make install
echo "export PATH=~/lib/nodejs/bin:$PATH" >> ~/.bashrc


どうしてバンドルされているはずのtherubyracerが認識されていないのか、しっかり原因を突き止めてられておらずちょっと気持ち悪いのですが、とりあえずRails3はランタイムJavascriptが必要ということだけ頭に入れておいて、先に進みたいと思います。

参考:
"Could not find a JavaScript runtime" と Rails 3.1 起動に失敗する件


【追記】もしかしたら、※の部分で、2行目を省略しなかったらもしかしたらうまくいっていたのかも。依存関係を考えると実行順序が間違っていた可能性もあるかもしれない・・・。