RubyやRailsをプロジェクト毎に入れて管理する方法

rubyとrailsをプロジェクト毎にバージョンを分ける時のメモ。

一応、rubyのバージョン切り替えにはrbenvを使っていて、gemの管理はbundlerにしています。

私の開発環境

  • ホストマシン・・Windows10 64bit
  • 仮想マシン・・VirtialBox 5.0.2
  • 仮想マシンのOS・・CentOS7.0

他に、ホストマシンと仮想マシン間で共有フォルダを作成しています。

RubyとRailsをプロジェクト毎に管理する方法

1、必要なRubyのバージョンをインストール

もし、新しいバージョンのrubyを使いたい場合は、以下のコマンドを実行します。(下の例ではRuby2.4.2をインストールしています)

$ rbenv install -l
$ rbenv install  2.4.2

既存のバージョンで十分であれば、上記のコマンドを実行する必要はありません。

2、Ruby、Railsを入れるディレクトリを作成、bundle install

次に、rubyを入れるフォルダを作成。

$ mkdir sample
$ cd sample
$ rbenv local 2.4.2
$ gem install bundler

これでsampleディレクトリに、ruby 2.4.2が追加されます。

そして、同ディレクトリにrailsを入れていきます。まずは、以下のコマンドを実行して、gemfileを作成します。

$ bundle init

そしてgemfileを開き、gem 'rails'の部分をコメントアウト&バージョンを指定します。

//Gemfile
gem 'rails', '~> 5.1.6'

そして、pathを指定してbundle install。(共有フォルダを使っている場合は、以下の補足を要チェック!

$ bundle install --path vendor/bundle

補足:仮想マシン&共有フォルダを使っている場合のbundle installの注意点

もし、仮想マシン&共有フォルダを使って開発をしている場合は、bundle installに以下のエラーが発生してしまいます。

text file busy @ unlink_internal bundle install

このエラーはザックリ言うと、「共有フォルダを使っているからbundle installできないよ!」と言う意味で、共有フォルダを通してbundle installを行おうとしているのが原因です。

このエラーを回避するためにも共有フォルダ外のディレクトリ(/user/local/src/bundles)を作成して、/user/local/src/bundlesに対してbundle installが実行されるようにします。

具体的には、以下の方法でbundle install用のフォルダを作りましょう。

$ cd
$ mkdir /usr/local/src/bundles
//プロジェクトのディレクトリに戻る
$ bundle install --path /usr/local/src/bundles/プロジェクト名

これでbundle installができます。また、一度pathを指定すると自動でrails側が「このアプリのpathは/user/local/src/bundels/プロジェクト名なんだな」と認識してくれるので、次回からはbundle installのみでOKです。

もし、上記のコマンドをしている時に、

There was an error while trying to
write to`/usr/local/src/bundles/project/ruby/2.4.2`. I
t is likely that you need to grant write permissions for that path.

と言うエラーが出た場合は、ファイルを書き込む権限がないと言う事なので、以下のコマンドを実行した後にbundle installを行います。 これでbundle installが通るはずですし、以降railsアプリを作る場合でもbundle installができます。

$ sudo chown ユーザー名 /usr/local/src/bundles/sample //フォルダの所有者をユーザー名に変更
$ chmod 755 /usr/local/src/bundles/sample //フォルダの権限を所有者のみ書き込みできるように変更

3、rails new、そしてrails -v

ラストは以下のコマンドを実行して終わり。

bundle exec rails new .
bundle exec rails -v
bundle exec rails s

データベースにMYSQLを使用したい場合は、以下の様にすればOKです。

bundle exec rails new .  -d mysql

あと毎回bundle execと入力するのは面倒なので、以下を参考にしてカスタマイズすると良いですね。

参考記事:【初心者向け】エイリアスの設定方法 - Qiita

後は、datebaseを作ってあげるだけです。

rails db:create

試しに、be rails -vとして上手く表示されればOKです。