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です。