bash on windowsでruby on rails動かしてみた
rbenv, bundler, railsをインストールしてlocalhost:3000でアクセスできるようになるところまで
はじめに、bash自体の初期設定を以下の記事を参考に行います
apt-getで必要なパッケージを入れます。libssl-dev libffi-dev libreadline-dev make
はrubyのビルドに必要になります。 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 {} +
これで 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
bundle install
次に config/environments/development.rb
を開いて
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
を
config.file_watcher = ActiveSupport::FileUpdateChecker
に書き直します。railsはdevelopモードでファイルの変更を監視しているのですが、bash on windowsがfilesystem watcherという仕組みに対応していないため起こるエラーです。
これでやっと
bundle exec rails s
でサーバーが起動して http://localhost:3000
でアクセスすることができます。
お疲れ様でした!
いろんな記事を参考にしました