darakeLog

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

2018-12-07 05:51:36 Rails Ruby

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

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

私の開発環境

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

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

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

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

<pre class="code" data-lang="" data-unlink="">    $ rbenv install -l
$ rbenv install  2.4.2

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

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

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

<pre class="code" data-lang="" data-unlink="">    $ mkdir sample
$ cd sample
$ rbenv local 2.4.2
$ gem install bundler

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

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

<pre class="code" data-lang="" data-unlink="">    $ bundle init

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

<pre class="code lang-ruby" data-lang="ruby" data-unlink="">    <span class="synSpecial">//</span><span class="synType">Gemfile</span>
gem <span class="synSpecial">'</span><span class="synConstant">rails</span><span class="synSpecial">'</span>, <span class="synSpecial">'</span><span class="synConstant">~> 5.1.6</span><span class="synSpecial">'</span>

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

<pre class="code" data-lang="" data-unlink="">    $ bundle install --path vendor/bundle

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

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

<pre class="code" data-lang="" data-unlink="">    text file busy @ unlink_internal bundle install

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

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

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

<pre class="code" data-lang="" data-unlink="">    $ 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です。

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

<pre class="code" data-lang="" data-unlink="">    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ができます。

<pre class="code" data-lang="" data-unlink="">    $ sudo chown ユーザー名 /usr/local/src/bundles/sample //フォルダの所有者をユーザー名に変更
$ chmod 755 /usr/local/src/bundles/sample //フォルダの権限を所有者のみ書き込みできるように変更

3、rails new、そしてrails -v

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

<pre class="code" data-lang="" data-unlink="">    bundle exec rails new .
bundle exec rails -v
bundle exec rails s

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

<pre class="code" data-lang="" data-unlink="">    bundle exec rails new .  -d mysql

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

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

参考記事:ターミナルの設定ファイル.bash_profileを設置する – webdev

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

rails db:create

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