以前の記事でUbuntu20.04にてrubyをインストールしましたが、今回はその環境でrailsアプリケーションサーバを立ち上げるところまでやってみたいと思います。railsの公式チュートリアルを基にした作業記録ですが、出くわしたエラーの対応も含めて書いています。今からrailsをやろう、楽しもうという同志の参考になればと。
Contents
下準備
rails & bundlerをバージョン指定して導入します。
gem install rails -v 6.0.3gem install bundler -v 2.2.17
yarnの導入。当方はUbuntu上でやってみたいので、aptを利用してインストールしました。これで起こるエラーを僕達はまだ知らない。
sudo apt -y updatesudo apt -y upgradesudo apt -y install yarn
railsチュートリアル用のディレクトリを切ったら・・
mkdir ~/rails-tutcd ~/rails-tut
rails new して新たなrailsアプリケーションを作成。
rails _6.0.3_ new hello_app
すると以下のような結果になりました。どうやらnodejsがないですよと言われているようです。
Bundle complete! 17 Gemfile dependencies, 75 gems now installed.Use `bundle info [gemname]` to see where a bundled gem is installed.run bundle binstubs bundlerrun bundle exec spring binstub --all* bin/rake: Spring inserted* bin/rails: Spring inserted rails webpacker:installsh: 1: node: not foundsh: 1: nodejs: not foundNode.js not installed. Please download and install Node.js <https://nodejs.org/en/download/>
漢は黙ってsudo apt install。
sudo apt -y install nodejs
bundle install でちょいコケ
bundle install するところでちょっとコケました。
$ bundle _2.2.17_ installCalling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.Warning: the running version of Bundler (2.2.17) is older than the version that created the lockfile (2.3.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.3.4`.Fetching gem metadata from <https://rubygems.org/>...........You have requested: listen = 3.1.5The bundle currently has listen locked at 3.7.1.Try running `bundle update listen`If you are updating multiple gems in your Gemfile at once,try passing them all to `bundle update`$ bundle update listenFetching gem metadata from <https://rubygems.org/>..........Resolving dependencies...Bundler found conflicting requirements for the Ruby version: In Gemfile: Ruby bootsnap (= 1.4.5) was resolved to 1.4.5, which depends onRuby (>= 2.0.0) capybara (= 3.28.0) was resolved to 3.28.0, which depends onRuby (>= 2.4.0) listen (= 3.1.5) was resolved to 3.1.5, which depends onRuby (>= 2.2.3, ~> 2.2) puma (= 4.3.6) was resolved to 4.3.6, which depends onRuby (>= 2.2) selenium-webdriver (= 3.142.4) was resolved to 3.142.4, which depends onRuby (>= 2.3)$ ruby -vruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux]
調べてみると、Ruby ~> 2.2 の意味は「2.2以上、3.0未満」とのこと。なるほど。
いまのrubyはrbenv経由でインストールしたものなので、利用可能なバージョンを改めて確認します。
$ rbenv install -l2.6.92.7.53.0.3jruby-9.3.2.0mruby-3.0.0rbx-5.0truffleruby-21.3.0truffleruby+graalvm-21.3.0
2.7.5あたりが良さそう。インストールします。
$ rbenv install 2.7.5
ローカルにバージョン変更&確認。
$ rbenv local 2.7.5$ rbenv version2.7.5 (set by ~/rails-tut/hello_app/.ruby-version)
これで良さげです。再度bundle install
してみます。一回目は失敗して、エラーメッセージの指示どおりbundle update
やらなんやかんやしました。
$ bundle _2.2.17_ installTraceback (most recent call last):2: from ~/.rbenv/versions/2.7.5/bin/bundle:23:in `<main>'1: from ~/.rbenv/versions/2.7.5/lib/ruby/2.7.0/rubygems.rb:296:in `activate_bin_path'~/.rbenv/versions/2.7.5/lib/ruby/2.7.0/rubygems.rb:277:in `find_spec_for_exe': Could not find 'bundler' (2.3.4) required by your ~/rails-tut/hello_app/Gemfile.lock. (Gem::GemNotFoundException)To update to the latest version installed on your system, run `bundle update --bundler`.To install the missing version, run `gem install bundler:2.3.4`$ bundle update --bundlerWarning: the running version of Bundler (2.1.4) is older than the version that created the lockfile (2.3.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.3.4`.The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for x86_64-linux, ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.Fetching gem metadata from <https://rubygems.org/>...........Fetching gem metadata from <https://rubygems.org/>.You have requested: listen = 3.1.5The bundle currently has listen locked at 3.7.1.Try running `bundle update listen`If you are updating multiple gems in your Gemfile at once,try passing them all to `bundle update`$ bundle updateWarning: the running version of Bundler (2.1.4) is older than the version that created the lockfile (2.3.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.3.4`.The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for x86_64-linux, ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.Fetching gem metadata from <https://rubygems.org/>...........Fetching gem metadata from <https://rubygems.org/>.Resolving dependencies....Fetching rake 12.3.3 (was 13.0.6)...Installing webpacker 4.0.7 (was 4.3.0)Bundle updated!Post-install message from sass:Ruby Sass has reached end-of-life and should no longer be used.* If you use Sass as a command-line tool, we recommend using Dart Sass, the new primary implementation: <https://sass-lang.com/install>* If you use Sass as a plug-in for a Ruby web framework, we recommend using the sassc gem: <https://github.com/sass/sassc-ruby#readme>* For more details, please refer to the Sass blog: <https://sass-lang.com/blog/posts/7828841>$ bundle update --bundlerWarning: the running version of Bundler (2.1.4) is older than the version that created the lockfile (2.3.4). We suggest you to upgrade to the version that created the lockfile by running `gem install bundler:2.3.4`.The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby, x86_64-linux but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`....Bundle updated!$ bundle _2.2.17_ installTraceback (most recent call last):2: from ~/.rbenv/versions/2.7.5/bin/bundle:23:in `<main>'1: from ~/.rbenv/versions/2.7.5/lib/ruby/2.7.0/rubygems.rb:296:in `activate_bin_path'~/.rbenv/versions/2.7.5/lib/ruby/2.7.0/rubygems.rb:277:in `find_spec_for_exe': Could not find 'bundler' (2.3.4) required by your ~/rails-tut/hello_app/Gemfile.lock. (Gem::GemNotFoundException)To update to the latest version installed on your system, run `bundle update --bundler`.To install the missing version, run `gem install bundler:2.3.4`
んむ、ちょい沼りかけ・・。
⇒この記事を参考に解決。
$ BUNDLER_VERSION=2.2.17 bundle installUsing rake 12.3.3...Using webpacker 4.0.7Bundle complete! 17 Gemfile dependencies, 75 gems now installed.Use `bundle info [gemname]` to see where a bundled gem is installed.
rails serverしたい人生だった
config/environments/development.rbに追記して・・
# allow connections to local server config.hosts.clear
rails server
してみます。
$ rails server=> Booting Puma=> Rails 6.0.3 application starting in development => Run `rails server --help` for more startup optionsRAILS_ENV=development environment is not defined in config/webpacker.yml, falling back to production environmentExitingTraceback (most recent call last): 77: from bin/rails:3:in `<main>' 76: from bin/rails:3:in `load'...~/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:91:in `rescue in load': Webpacker configuration file not found ~/rails-tut/hello_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - ~/rails-tut/hello_app/config/webpacker.yml (RuntimeError)
どうやらrails webpacker:install
する必要がありそう。やってみます。
$ rails webpacker:installrails aborted!ArgumentError: Malformed version number string 0.32+git~/rails-tut/hello_app/bin/rails:9:in `<top (required)>'~/rails-tut/hello_app/bin/spring:15:in `<top (required)>'bin/rails:3:in `load'bin/rails:3:in `<main>'Tasks: TOP => webpacker:install => webpacker:check_yarn(See full trace by running task with --trace)
むむ、なにかバージョンの整合性がとれていなさそう。
⇒調べてみると、aptでインストールしたyarnのバージョンがダメそうでした。
一旦yarnをアンインストール。
$ sudo apt -y remove yarn
こちらの記事等を参考に、安定版を導入します。
$ sudo curl -sS <https://dl.yarnpkg.com/debian/pubkey.gpg> | sudo apt-key add -$ echo "deb <https://dl.yarnpkg.com/debian/> stable main" | sudo tee /etc/apt/sources.list.d/yarn.list$ sudo apt update && sudo apt install yarn$ yarn -v1.22.17
これでもう一度rails webpacker:install
を試してみます。
$ rails webpacker:installRAILS_ENV=development environment is not defined in config/webpacker.yml, falling back to production environmentcreate config/webpacker.ymlCopying webpack core configcreate config/webpackcreate config/webpack/development.jscreate config/webpack/environment.jscreate config/webpack/production.jscreate config/webpack/test.js...Webpacker successfully installed 🎉 🍰
よしっ。いよいよ、rails server。
$ rails server=> Booting Puma=> Rails 6.0.3 application starting in development => Run `rails server --help` for more startup optionsPuma starting in single mode...* Version 4.3.6 (ruby 2.7.5-p203), codename: Mysterious Traveller* Min threads: 5, max threads: 5* Environment: development* Listening on tcp://127.0.0.1:3000* Listening on tcp://[::1]:3000Use Ctrl-C to stop
サーバが立ちました!やったね。

参考
- 第1章 ゼロからデプロイまで – Railsチュートリアル
- 【Ruby】Ubuntu20.04でインストール│つぶやきテック
- rbenvでrubyのバージョンを変更する手順 – Qiita
- 【Rails 6.0.0.rc2】rails s したら RAILS_ENV=development environment is not defined in config/webpacker.yml, falling back to production environment Exiting で怒られた。 – Qiita
- Ruby 2.7 の bundle install で Could not find ‘bundler’ エラーが出たときの対応 – Qiita