rhaco使わないでWebサービス作るならもうPHP使わずに他の言語でやってみようかなと思い、 DjangoとRailsを迷ったあげく、ChefでRuby使うからRubyの勉強という意味を込めてRailsでやってみることにした。
とりあえずまずはインストール出来ないと話にならないので、Railsをインストールしてみた話。
Ubuntu使ってるので、aptitude install railsでさくっと終わるかなと思ってTwitterで何となく
shigepon: railsはバージョンいくつを使うと吉なんでしょ?
とつぶやいたら、@sugamasaoさんから
sugamasao: @shigepon しがらみがなければ、最新の4.0.2が良いと思います。お試しで触って見るなら、4.1のbeta版を使って見ても良いかもしれません〜
という話が!そうなるとrubyも2系入れないとダメじゃん!と思いつつ
shigepon: @sugamasao ただ、うちのubuntuのrubyが1.8なので、まずは2.0にしないといけないっすね。
とボヤいたら、やっぱり
sugamasao: @shigepon なるほど〜!1.8系はもうオワコンなので、2系を入れたほうが良いですねwちなみに、いまは2.1がリリースされてます!
とのお達しが。んじゃ2系入れるかとググりながらインストールしてみた。 参考にしたページは次のとおり
- Rails開発環境の構築(rbenvでRuby導入からBundler、Rails導入まで) - Qiita
- Starting the rails, sqlite3 Error - Stack Overflow
- rails server 時に `autodetect': Could not find a JavaScript runtime が出たら。 - 人生ずっと勉強
手順
行ったり来たりしてるからこんな感じでスッと出来てないけど、だいたいこんな感じ
rbenvインストール
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
mkdir -p ~/.rbenv/plugins
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
~/.profileに以下を追加
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
んで
source ~/.profile
opensslは入ってたから特に何もしなかったけど必要なら
sudo aptitude install openssl
iconv, readlineは最初から入ってるんじゃないかな? んでインストール
sudo rbenv install -l
rbenv install 2.1.0
rbenv global 2.1.0
rbenvで何かやったら
rbenv rehash
を忘れずに
Bundlerインストール
rbenv exec gem install bundler
rbenv rehash
Railsインストール
bundle init
vim Gemfile
Gemfile内に
gem "rails", "4.0.2"
を追加。
bundle install --path vendor/bundle
bundle exec rails new hoge --skip-bundle
rm -f Gemfile
rm -f Gemfile.lock
rm -rf .bundle
rm -rf vendor/bundle
cd hoge
bundle install --path vendor/bundle
echo '/vendor/bundle' >> .gitignore
bundle exec rails server
で途中下のようにハマりながら起動を確認した。
はまったポイント
Ruby on Railsをインストールする時にプロジェクトのディレクトリで
bundle install -path vendor/bundle
すると、
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/bin/ruby1.9.1 extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal'
or 'yum install sqlite-devel' and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/bin/ruby1.9.1
--with-sqlite3-dir
--without-sqlite3-dir
--with-sqlite3-include
--without-sqlite3-include=${sqlite3-dir}/include
--with-sqlite3-lib
--without-sqlite3-lib=${sqlite3-dir}/lib
--enable-local
--disable-local
Gem files will remain installed in /home/helio/.bundler/tmp/23089/gems/sqlite3-1.3.8 for inspection.
Results logged to /home/helio/.bundler/tmp/23089/gems/sqlite3-1.3.8/ext/sqlite3/gem_make.out
An error occurred while installing sqlite3 (1.3.8), and Bundler
cannot continue.
Make sure that `gem install sqlite3 -v '1.3.8'` succeeds before
bundling.
というエラーが出たのは
sudo aptitude install sqlite3 libsqlite3-dev
bundle install --path vendor/bundle
で出なくなった。インストールパスの指定が無ければpathオプションは要らない。
bundle exec rails serverで
autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
というエラーが出て、サーバを起動出来なかった。これは プロジェクトに入っているGemfileに書いてあるtherubyracerに関する行をコメントアウトして
bundle install --path vendor/bundle
とすれば起動出来るようになった。