C++と色々

主にC++やプログラムに関する記事を投稿します。

bash on windowsでruby on rails動かしてみた

rbenv, bundler, railsをインストールしてlocalhost:3000でアクセスできるようになるところまで

はじめに、bash自体の初期設定を以下の記事を参考に行います

qiita.com

apt-getで必要なパッケージを入れます。libssl-dev libffi-dev libreadline-dev makerubyのビルドに必要になります。 libsqlite3-dev はsqlite3のgemをインストールするときに必要になります

sudo apt-get install -y git rbenv libssl-dev libffi-dev libreadline-dev make libsqlite3-dev

rbenv installを行えるようにするためにruby-buildをcloneします

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

ホームディレクトリの.bashrcに以下を追記してsourceコマンドで適用します

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

パスを追加しないと、rbenvでinstallしたrubyより最初からインストールされている/usr/bin/rubyを見にいってしまう、ということが起きてしまいます。

ここまでで rbenv install -lでインストール可能なrubyのバージョンの一覧を取得できるようになるはずです。 次に、rubyをインストールします。今回は2.3.1をインストールしました

rbenv install 2.3.1
rbenv rehash

自分はrbenvのどのコマンドでrehashする必要があるのか把握していないため、rbenvのコマンドを実行したらとりあえず rbenv rehashしています…… よく分からない人はrbenvコマンドを実行したらとりあえずrehashをした方が良いかもしれないです。自分はそうしました。 rbenv versionsでインストールしたrubyが確認できます。 railsプロジェクト用のディレクトリを作成します。そのディレクトリに移動したら以下のコマンドを実行します

rbenv local 2.3.1

ローカルの ruby -v は2.3.1になったでしょうか。bundlerをインストールします

rbenv exec gem install bundler

bundleで初期化します

rbenv exec bundle init

これでGemfileが生成されます。Gemfileの # gem "rails"コメントアウトされている行をコメント解除します。 railsのバージョンを指定してもしなくても構いません。指定する必要がある方はバージョンを追記してください。 bundleを実行するには rbenv exec bundle が正確ではありますが、グローバルにbundlerがインストールされていなければ rbenv exec は省略することができます。

さて、実はこのまま bundle install してもうまく行きません。 ArgumentError: parent directory is world writable but not sticky というエラーが出るでしょう。 ~/.bundleディレクトリ以下のパーミッションが適切ではないため起こるエラーのようです。以下のコマンドで直ります

find ~/.bundle/cache -type d -exec chmod 0755 {} +

github.com

これで bundle installができます

bundle install --path vendor/bundle

bundle installしたらrailsの新規プロジェクト作成ができます。Gemfileを上書きするか聞かれますのでYで上書きします

bundle exec rails new .

これでもまだrailsは実行できません。上書きされたGemfileを開いて therubyracer のgemのコメントアウトを解除します。

# gem 'therubyracer', platforms: :ruby

↑これのコメントを解除する。そしてinstall

pcl.solima.net

bundle install

次に config/environments/development.rb を開いて

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

config.file_watcher = ActiveSupport::FileUpdateChecker

に書き直します。railsはdevelopモードでファイルの変更を監視しているのですが、bash on windowsがfilesystem watcherという仕組みに対応していないため起こるエラーです。

qiita.com

これでやっと

bundle exec rails s

でサーバーが起動して http://localhost:3000でアクセスすることができます。

お疲れ様でした!

いろんな記事を参考にしました

www.qoosky.io

qiita.com

qiita.com

rbenvつかってrailsチュートリアルやってみよう! | niwatako$