【Ruby on Rails】rails --server でサーバが起動しない件について
ruby on rails で少し遊ぼうと思ったが最初からエラーの連発で大変だったのでまとめようと思う。
環境
Vagran Ubuntu/trasty64
Ruby -v 2.7.1
railsのインストール
$ gem install rails $ rails -v >> 6.0.3.2
railsはデフォルトのデータベースにsqlite3を使用するようなのでsqlite3もインストールする。
$ sudo apt install sqlite3 $
rails newを実行するとBuildErrorが発生
ドットインストールに倣いmy_app
という名前でアプリを作成してみる。
$ rails new my_app >> Gem::Ext::BuildError: ERROR: Failed to build gem native extension. An error occurred while installing sassc (2.4.0), and Bundler cannot continue. Make sure that `gem install sassc -v '2.4.0' --source 'https://rubygems.org/'` succeeds before bundling. Could not find gem 'sqlite3 (~> 1.4)' in any of the gem sources listed in your Gemfile. Run `bundle install` to install missing gems.
この時点でたくさんのエラーが表示されていた。
ドットインストールの補足にはGemfile内のsqlite3
の記述部分を変更すると書かれていたが、大丈夫そうだったのでそのままにした。
bundle install
$ bundle install >> Gem::Ext::BuildError: ERROR: Failed to build gem native extension. An error occurred while installing sassc (2.4.0), and Bundler cannot continue. Make sure that `gem install sassc -v '2.4.0' --source 'https://rubygems.org/'` succeeds before bundling.
sqlite3
に関するエラーは消えたがBuildエラーは出ていたのでMake sure that
gem install sassc -v '2.4.0' --source 'https://rubygems.org/'succeeds before
この部分を試してみる。
gem install sassc -v '2.4.0' --source 'https://rubygems.org/'
bundlerの実行ができなかったので次のコマンドを試すように促されている。
$ gem install sassc -v '2.4.0' --source 'https://rubygems.org/' >> Building native extensions. This could take a while... Successfully installed sassc-2.4.0 Parsing documentation for sassc-2.4.0 Installing ri documentation for sassc-2.4.0 Done installing documentation for sassc after 0 seconds 1 gem installed
コマンドはうまく行ったようで、sassc
のインストールが完了したらしい。
sassc
を調べても速いぞ!って記事しか見つからなかったのでなんなのかわからないがsassのコンパイラかなにかだろうか。
railsサーバを起動してみる
rails new
で作成したmy_app
ディレクトリに移動してサーバを起動してみる。
rails s
でサーバを起動、-b
でipアドレスを指定、-d
でバックグラウンドでサーバを起動させるオプション。
$ cd my_app $ rails s -b 192.168.33.10 -d >> Could not find gem 'sqlite3 (~> 1.4)' in any of the gem sources listed in your Gemfile. Run `bundle install` to install missing gems.
またもsqlite3
とbundle install
しろと表示がでてきた。
bundle updateしてみる
bundle, Gemfileについて調べていたらこんなQiitaが出てきた。
▼Bundler, Gemfile, Gemfile.lock について - Qiita
すでに用意された Gem に変更を加える場合は Gemfile.lock を修正し、 bundle update を行います。例えばバージョンの変更や不必要な Gem を削除したい時などです。
とあったのでbundle update
してみる。
$ bundle update
>>
Bundle updated!
bundle update
はうまくいったようなのでもう一度サーバを起動させてみる。
$ rails s -b 192.168.33.10 -d >> in `rescue in load': Webpacker configuration file not found /home/vagrant/workspace/ruby/rails_lessons/my_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /home/vagrant/workspace/ruby/rails_lessons/my_app/config/webpacker.yml (RuntimeError)
ずらずらと文字が出てきて最終的にrails webpacker:install
するように促された。
rails webpacker:installしてみる
$ rails webpacker:install
>>
sh: 1: node: not found
sh: 1: nodejs: not found
Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/
と、nodeがないからインストールするように言われる。
nodeとnodejsと一応npmをインストールする
$ sudo apt-get install nodejs npm node $ rails webpacker:install >> Webpacker requires Node.js >= 8.16.0 and you are using 0.10.25 Please upgrade Node.js https://nodejs.org/en/download/
(え、nodeとnodejsの違いがわからない…)
一通りエラーもなくインストールできたのであらためてrails webpacker
をインストールしてみると今度はNode.jsのバージョンをあげるように言われた。
nodejsのアップデート
nodejs ubuntu アップデートで検索したところn
と呼ばれるパッケージを使ってアップデートできると記事があったので試してみる。
$ sudo npm install n -g >> npm ERR! If you need help, you may report this log at: npm ERR! <http://github.com/isaacs/npm/issues>
npmのエラーが連発していて、今度はgithubのissuesを見るように促されたのでアクセスしてみる。
どうやらnodeとnpmのバージョンが古いことが原因らしい。
node -v v0.10.25 npm -v 1.3.10
激古
ということなのでいったんnpm
のバージョンアップをしてnode
のバージョンアップを試みる。
npm update -g npm してみる
npm
を使ってnpm
自身をアップデートできるらしい。
$ npm update -g npm
さて、このコマンドを実行しても反応がない。
npm -v
してみてもバージョンアップは1.3.10のまま。
と、ここでふと思ったのがアップデートする順番ってnode.js
が先じゃない?
nvmでNode.jsのバージョン管理
githubのissuesにあったようにnvm
を使ってnode
のバージョンアップをしてみる。
※あとで知ったけどバージョン管理はnvm
のほかにnodenv
やnodist
, n
などあるらしい。
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
これでnvm
のインストールができた。
source
コマンドでbashrc
ディレクトリを更新してnvm
のバージョンを確認してみる。
$ source ~/.bashrc $ nvm --version >> 0.35.2
次にnode
のバージョンを上げる
nvm ls-remote
コマンドでnode
のバージョン一覧を確認できるが、もう安定板でいい。
$ nvm install stable >> Now using node v14.6.0 (npm v6.14.6) Creating default alias: default -> stable (-> v14.6.0)
node
のバージョンアップをしたことでnpm
もバージョンアップできたっぽい。
yarnをインストールする
npm
のバージョンアップができたのでwebpacker
のインストールをもう一度試みる。
$ rails webpacker:install
>>
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
すると今度はyarn
をインストールするように言われた。
※yarn
とはnpm
と同様パッケージマネージャーらしい。
▼パッケージマネージャとは
$ sudo apt install yarn
>>
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package yarn
むむ、apt
曰くyarn
が見つからないらしいのでyarn
の公式を見てみる。
どうやらリポジトリの設定をしてからでないとインストールできないようだ。
公式サイトにあるようにコマンドを実行していく。
$ curl -sS https://dl.yarnpkg.com /debian/pubkey.gpg | sudo apt-key add - >>OK
$ echo "deb https://dl.yarnpkg.co m/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list >>deb https://dl.yarnpkg.com/debian/ stable main
リポジトリの設定が終わったのでyarn
をインストールをしていく。
$ sudo apt update && sudo apt install yarn >>Setting up yarn (1.22.4-1) ...
yarn
のインストールも終わったようだ。
rails webpacker:installを再度試す
rails webpacker:install
に戻る。
$ rails webpacker:install >> run yarn add --dev webpack-dev-server from "." info No lockfile found. An unexpected error occurred: "EPROTO: protocol error, symlink... Webpacker successfully installed �🎉
webpacker
のインストールは成功。
しかし、yarn
のほうでエラーがでていた。
このままサーバを起動してみてもうまくいくが、yarn
のエラーが気になるので直そう。
yarn add --dev webpack-dev-server
を追加するようにと、yarn
のlockfileがないのと、symlink
で予期せぬエラーが発生したということ。
symlink
はホストOSとゲストOSとのファイル共有のことらしいのでrootに移動してから(今はrails newで作成したmy_appディレクトリにいるので)yarn add --dev webpack-dev-server
コマンドを試してみる。
$ yarn add --dev webpack-dev-server` >> success Saved lockfile. success Saved 253 new dependencies. . . . Done in 3.87s.
いくつかwarningはでているがうまく行ったらしい。
railsサーバを起動してみる
$ $ rails s -b 192.168.33.10 -d >> => Booting Puma => Rails 6.0.3.2 application starting in development => Run `rails server --help` for more startup options
エラーもでないので192.168.33.10:3000にアクセスしてみる。
まとめ
環境構築が一番大変。