fugafuga.write

日々のログ

rbenv + bundler 環境で Ruby on Rails4 プロジェクトを新規作成する

rails プロジェクトを新たに作る手順

f:id:tokoyax:20150228150613j:plain

はじめに

Vagrant + rbenv + Bundler のセットアップが完了していることが前提です。

まだやってないよーって方は以下を参考に。

blog.tokoyax.com

blog.tokoyax.com

blog.tokoyax.com


プロジェクトで使用する Ruby のバージョンを指定する

ユーザー dev1 で作業。

rbenv local でプロジェクトで使用する ruby のバージョンをローカル指定します。

$ cd /home/dev1/rails_apps/myfirstapp

インストール済みのRubyのバージョンを確認
$ rbenv versions
  2.1.5
* 2.2.0 (set by /usr/local/rbenv/version)

インストール可能なRubyのバージョンを確認
$ rbenv install -l
Available versions:
  1.8.6-p383
  1.8.6-p420
...

2.2.0 をローカル指定します
$ rbenv local 2.2.0

ローカルでセットされているかバージョン確認
$ rbenv version
2.2.0 (set by /home/dev1/rails_apps/myfirstapp/.ruby-version)

.ruby-version が作成されます。

rails をローカルインストールする

GemFile 作成

$ bundle init
Writing new Gemfile to /home/dev1/rails_apps/myfirstapp/Gemfile


rails のバージョンを指定する。

$ vi GemFile

# myfirstapp GemFile
source "https://rubygems.org"

gem "rails", "4.2.0" ⇐ コメント外すこと!!

rails を Bundler でインストールする

$ bundle install --path=vendor/bundle --binstubs=bundle_bin
Fetching gem metadata from https://rubygems.org/...........
Fetching version metadata from https://rubygems.org/..
Resolving dependencies...

途中で、

Gem::RemoteFetcher::UnknownHostError: no such name (https://rubygems.org/gems/rails-4.2.0.gem)
An error occurred while installing rails (4.2.0), and Bundler cannot continue.
Make sure that `gem install rails -v '4.2.0'` succeeds before bundling.

このようなエラーが発生することがありますが、ネットワーク系のエラーのようなので再度 bundle install を行うと続きからインストールが始まります。

rails プロジェクト作成

DBにはmysqlを使用します。(指定しない場合は、SQLite)

$ rails new . --skip-bundle -d mysql
      create
      create  README.rdoc
...


次に、bundle install します。
これは、rails が作成した GemFile があるのでそれに基づいて gem をインストールするためです。
途中、GemFile を上書きするか聞いてくるので、Yes で続行します。

$ bundle install --path=vendor/bundle --binstubs=bundle_bin


インストール中、下記のような mysql 関連のエラーが発生した場合、

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /usr/local/rbenv/versions/2.2.0/bin/ruby -r ./siteconf20150228-20842-ysdki3.rb extconf.rb
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
checking for mysql_query() in -lmysqlclient... no

mysql-devel をインストールしてからリトライ。

$ sudo yum install -y mysql-devel


rails プロジェクト内に gem のインストールが完了しました。

$ bundle install --path=vendor/bundle --binstubs=bundle_bin
…
Bundle complete! 12 Gemfile dependencies, 57 gems now installed.
Bundled gems are installed into ./vendor/bundle.

vendor/bundle と bundle_bin は git の管理対象から外す

$ echo "/vendor/bundle" >> .gitignore
$ echo "/bundle_bin" >> .gitignore


rails アプリケーション起動確認

rails server で確認します。

$ rails server
/home/dev1/rails_apps/myfirstapp/myApp/vendor/bundle/ruby/2.2.0/gems/byebug-3.5.1/lib/byebug/history.rb:1:in `require': cannot load such file -- readline (LoadError)

上記のようなエラーが発生する場合、

gem 'rb-readline'

を GemFile に追記します。

追記したら Bundler でインストール。

$ bundle install --path=vendor/bundle --binstubs=bundle_bin

もう一度サーバー起動。

$ rails server

結果的に、ブラウザから localhost:3000 には繋がりませんでした。


調べたところ、

まず、ホストOS側の VagrantFile 内にポートフォワーディングの設定をする必要がありました。

config.vm.network "forwarded_port", guest: 3000, host: 3000

Vagrant 側の iptables は、stopしました。

VagrantFile を編集したので、設定をリロードします。

$ vagrant reload


また、ブラウザでアクセスしていた localhost は、Vagrant 上で動作している CentOS 自身のことでした。
デフォルトの rails s だと guestOS のみしか接続できない設定となっていたわけです。

そこで、下記コマンドでサーバーの起動をします。

$ rails s -b 0.0.0.0


今度は、rails に接続できましたが mysql 関係のエラーが出ていました。

Mysql2::Error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)):

仮想環境に mysql が入っていなかったことが原因です。

mysql を導入し、再度接続。


またエラーが。。。。

ActiveRecord::NoDatabaseError (Unknown database 'myApp_development'):

DB作ってなかっただけでした。

DB作成し、再度接続。


f:id:tokoyax:20150228192835j:plain


これで、完成です。

ディレクトリ構成が少し微妙な感じがするので、要検討です。
rails new myApp を rails new . に変更しました。


Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

Ruby on Rails 4アプリケーションプログラミング

Ruby on Rails 4アプリケーションプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング



[参考]
rbenv インストールから Bundler を使用した Rails のローカルインストールと起動まで - Qiita
rails new や rails serverなどrailsコマンドの使い方 - Rails Webook
【DBまとめ】MySQLからPostgreSQL,SQLiteまで - Qiita
Virtual Box 上の Cent OS に MySQL をインストール
Ruby - developmentでWEBrick起動のRailsはbindオプションでanyアクセスを受け付けるようになる - Qiita