概要
Vagrant + VirtualBox + CentOSの環境にRuby、MySQLをインストール後、Railsをインストールするのにいろいろと躓きながら進めた記録。
構成
- Vagrant : 2.2.14
- VirtualBox : 6.1.18
- Box : bento/CentOS-7.7
- mysql : Ver 8.0.23 for Linux on x86_64
- Ruby : ruby 3.0.0p0
- Rails : Rails 6.1.3
インストール概略
階層が下のものは今回必要になったもの。
- SELinux、firewalldの停止
- Railsインストール
- sasscインストール
- g++インストール
- mysql-develインストール
- Node.jsインストール
- sasscインストール
- Railsサーバー実行
- webpackerインストール
- Node.jsインストール(再掲)
- Yarnインストール
- webpackerインストール
利用手順
アプリケーション生成
sqlite3がデフォルトで未インストールではエラーが出るため、コマンドラインでmysqlを指定。
rails new app_name -d mysql
rails new app_name --database=mysql
database.ymlの修正
データベースを使わない場合は、development、test、productionの各database:をコメントアウト/削除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: vagrant socket: /var/lib/mysql/mysql.sock development: <<: *default # database: bbs_development test: <<: *default # database: bbs_test production: <<: *default # database: bbs_production # username: bbs # password: <%= ENV['BBS_DATABASE_PASSWORD'] %> |
Railsサーバー起動
アプリケーションディレクトリー内で以下を実行。
rails s -b 0.0.0.0
ブラウザから以下でアクセス。
localhost:3000
Railsに影響する機能の停止
Railsをインストール・稼働させるにあたって、Railsに影響を与える機能を停止させる。
SELinux
アクセス制御機能のSELinuxのステータスがEnforsing
の場合にはPermissive
になるよう設定する。
firewalld
ファイアーウォール・サービスfirewalldが有効の場合は無効化する。
Railsのインストール
Rails本体のインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[vagrant@localhost ~]$ gem install rails Fetching concurrent-ruby-1.1.8.gem Fetching crass-1.0.6.gem Fetching loofah-2.9.0.gem ..... Successfully installed rack-2.2.3 Successfully installed concurrent-ruby-1.1.8 Successfully installed sprockets-4.0.2 ..... Building native extensions. This could take a while... Successfully installed websocket-driver-0.7.3 Building native extensions. This could take a while... Successfully installed nio4r-2.5.5 ..... Done installing documentation for rack, concurrent-ruby, sprockets, zeitwerk, tzinfo, i18n, activesupport, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, rack-test, erubi, builder, actionview, actionpack, sprockets-rails, thor, method_source, railties, mimemagic, marcel, activemodel, activerecord, globalid, activejob, activestorage, actiontext, mini_mime, mail, actionmailer, actionmailbox, websocket-extensions, websocket-driver, nio4r, actioncable, rails after 117 seconds 38 gems installed |
インストール後のバージョン確認。
1 2 |
[vagrant@localhost ~]$ rails --version Rails 6.1.3 |
エラー1~アプリ生成時~sassc
sasscパッケージがない
Railsインストール後にアプリケーションを生成しようとすると、sasscインストール時にエラーとなる。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost ~]$ mkdir app [vagrant@localhost ~]$ cd app [vagrant@localhost ~]$ rails new rails_test ..... Installing sassc 2.4.0 with native extensions 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. ..... |
sasscインストール時にg++がない
メッセージに従ってsasscをインストールしようとするとエラーになる。g++がないのが原因らしい。
参考サイト:centos7でsassc 2.0.0 with native extensionsのインストールに失敗
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[vagrant@localhost rails_test]$ gem install sassc Building native extensions. This could take a while... ERROR: Error installing sassc: ERROR: Failed to build gem native extension. ..... compiling ./libsass/src/ast.cpp make: g++: Command not found make: *** [ast.o] Error 127 make failed, exit code 2 Gem files will remain installed in /home/vagrant/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/sassc-2.4.0 for inspection. Results logged to /home/vagrant/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/sassc-2.4.0/gem_make.out |
gcc-c++はあるようだが・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[vagrant@localhost rails_test]$ yum list | grep gcc gcc.x86_64 4.8.5-44.el7 @base libgcc.x86_64 4.8.5-44.el7 @base compat-gcc-44.x86_64 4.4.7-8.el7 base compat-gcc-44-c++.x86_64 4.4.7-8.el7 base compat-gcc-44-gfortran.x86_64 4.4.7-8.el7 base gcc-c++.x86_64 4.8.5-44.el7 base gcc-gfortran.x86_64 4.8.5-44.el7 base gcc-gnat.x86_64 4.8.5-44.el7 base gcc-go.x86_64 4.8.5-44.el7 base gcc-objc.x86_64 4.8.5-44.el7 base gcc-objc++.x86_64 4.8.5-44.el7 base gcc-plugin-devel.x86_64 4.8.5-44.el7 base libgcc.i686 4.8.5-44.el7 base relaxngcc.noarch 1.12-6.el7 base relaxngcc-javadoc.noarch 1.12-6.el7 base |
インストールしてみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[vagrant@localhost rails_test]$ sudo yum install gcc-c++ 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.jaist.ac.jp * extras: ftp.jaist.ac.jp * updates: ftp.jaist.ac.jp 依存性の解決をしています ..... インストール: gcc-c++.x86_64 0:4.8.5-44.el7 依存性関連をインストールしました: libstdc++-devel.x86_64 0:4.8.5-44.el7 依存性を更新しました: libstdc++.x86_64 0:4.8.5-44.el7 完了しました! |
sasscのインストール成功
gcc-c++をインストールしてみると、無事sasscがインストールできた。
1 2 3 4 5 6 7 |
[vagrant@localhost rails_test]$ gem install sassc 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 |
エラー2~アプリ生成時~sqlite3
sqlite3エラー
再度アプリケーションを生成すると、まだsqlite3に関するエラーが残っている。使いたいのはmysql。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
[vagrant@localhost app]$ rails new rails_test create create README.md create Rakefile create .ruby-version create config.ru ..... checking for sqlite3.h... no sqlite3.h is missing. Try 'brew install sqlite3', 'yum install sqlite-devel' or 'apt-get install libsqlite3-dev' and check your shared library search path (the location where your sqlite3 shared library is located). *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. ..... Provided configuration options: --with-opt-dir --without-opt-dir ..... --with-sqlite3-lib --without-sqlite3-lib=${sqlite3-dir}/lib To see why this extension failed to compile, please check the mkmf.log which can be found here: /home/vagrant/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/sqlite3-1.4.2/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /home/vagrant/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/sqlite3-1.4.2 for inspection. Results logged to /home/vagrant/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/sqlite3-1.4.2/gem_make.out An error occurred while installing sqlite3 (1.4.2), and Bundler cannot continue. Make sure that `gem install sqlite3 -v '1.4.2' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: sqlite3 run bundle binstubs bundler Could not find gem 'sqlite3 (~> 1.4)' in any of the gem sources listed in your Gemfile. rails webpacker:install Could not find gem 'sqlite3 (~> 1.4)' in any of the gem sources listed in your Gemfile. Run `bundle install` to install missing gems. |
mysql-develのインストール
mysqlを使いたいので、mysql-devel
の存在を確認。
yum list | grep mysql-devl
存在しない場合はインストール。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[vagrant@localhost app]$ sudo yum install mysql-devel 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile * base: ftp.jaist.ac.jp * extras: ftp.jaist.ac.jp * updates: ftp.jaist.ac.jp 依存性の解決をしています ..... インストール中 : mysql-community-devel-8.0.23-1.el7.x86_64 1/1 検証中 : mysql-community-devel-8.0.23-1.el7.x86_64 1/1 インストール: mysql-community-devel.x86_64 0:8.0.23-1.el7 完了しました! |
Node.jsがないというエラー
生成時にエラーが発生したアプリケーションをいったん削除し、データベースにmysqlを指定してアプリケーションを生成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[vagrant@localhost app]$ rm -rf rails_test/ [vagrant@localhost app]$ rails new rails_test -d mysql create create README.md create Rakefile create .ruby-version ..... Fetching webpacker 5.2.1 Installing webpacker 5.2.1 Bundle complete! 17 Gemfile dependencies, 74 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. run bundle binstubs bundler rails webpacker:install sh: node: コマンドが見つかりません sh: nodejs: コマンドが見つかりません Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/ Exiting! |
railsサーバー起動でもエラー
webpackerエラー
ここでいったんrails s
でサーバーを起動すると、webpackerの設定ファイルがないというエラー。
1 2 3 4 5 6 7 8 9 10 11 |
[vagrant@localhost rails_test]$ rails s => Booting Puma => Rails 6.1.3 application starting in development => Run `bin/rails server --help` for more startup options Exiting /home/vagrant/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/webpacker-5.2.1/lib/webpacker/configuration.rb:99:in `rescue in load': Webpacker configuration file not found /home/vagrant/app/rails_test/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /home/vagrant/app/rails_test/config/webpacker.yml (RuntimeError) ..... from <internal:kernel>:90:in `tap' from /home/vagrant/app/rails_test/bin/spring:7:in `<top (required)>' from bin/rails:2:in `load' from bin/rails:2:in `<main>' |
webpackerインストールエラー
webpackerインストール時の”Please run rails webpacker:install”に従ってインストールしようとすると、ここでも”Node.jsがない”というエラーが出てサーバーが起動しない。
1 2 3 4 5 |
[vagrant@localhost rails_test]$ rails webpacker:install sh: node: コマンドが見つかりません sh: nodejs: コマンドが見つかりません Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/ Exiting! |
Node.jsのインストール
アプリケーション生成時、Railsサーバー実行時に共通してNode.jsに関するエラーが出ているので、Node.jsをインストール。
当初、最新版のv15.10.0をインストールした。
1 2 3 4 5 6 7 8 9 10 |
[vagrant@localhost rails_test]$ nvm install stable Downloading and installing node v15.10.0... Downloading https://nodejs.org/dist/v15.10.0/node-v15.10.0-linux-x64.tar.xz... ######################################################################## 100.0% Computing checksum with sha256sum Checksums matched! Now using node v15.10.0 (npm v7.5.3) Creating default alias: default -> stable (-> v15.10.0) [vagrant@localhost rails_test]$ node -v v15.10.0 |
再度webpackerインストールでエラー
再度webpackerをインストールしようとすると、Node.jsの警告とYarnに関するエラーが出てストップ。
1 2 3 4 |
[vagrant@localhost rails_test]$ rails webpacker:install Warning: you are using an unstable release of Node.js (v15.10.0). If you encounter issues with Node.js, consider switching to an Active LTS release. More info: https://docs.npmjs.com/try-the-latest-stable-version-of-node Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/ Exiting! |
Node.jsのダウングレード
Node.jsの警告も気持ち悪いので、ダウングレード。
1 2 3 4 5 6 7 8 9 10 11 |
[vagrant@localhost rails_test]$ nvm install 14.16.0 Downloading and installing node v14.16.0... Downloading https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz... ######################################################################## 100.0% Computing checksum with sha256sum Checksums matched! Now using node v14.16.0 (npm v6.14.11) [vagrant@localhost rails_test]$ nvm use 14.16.0 Now using node v14.16.0 (npm v6.14.11) [vagrant@localhost rails_test]$ node -v v14.16.0 |
ダウングレードしたNode.jsを使用。
1 2 |
[vagrant@localhost ~]$ nvm use 14.16.0 Now using node v14.16.0 (npm v6.14.11) |
ここで再度webpackerをインストールしようとすると、まだ”Yarnがインストールされていない”というエラーが残っている。
1 2 3 |
[vagrant@localhost rails_test]$ rails webpacker:install Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/ Exiting! |
Yarnのインストール
npmでYarnをインストールする。
参考:Yarn公式サイト
1 2 3 4 5 6 7 8 9 |
[vagrant@localhost rails_test]$ npm install --global yarn > yarn@1.22.10 preinstall /home/vagrant/.nvm/versions/node/v14.16.0/lib/node_modules/yarn > :; (node ./preinstall.js > /dev/null 2>&1 || true) /home/vagrant/.nvm/versions/node/v14.16.0/bin/yarn -> /home/vagrant/.nvm/versions/node/v14.16.0/lib/node_modules/yarn/bin/yarn.js /home/vagrant/.nvm/versions/node/v14.16.0/bin/yarnpkg -> /home/vagrant/.nvm/versions/node/v14.16.0/lib/node_modules/yarn/bin/yarn.js + yarn@1.22.10 added 1 package in 6.684s |
webpackerインストール
Node.jsとYarnがそろったので、webpackerがインストールできた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[vagrant@localhost rails_test]$ rails webpacker:install create config/webpacker.yml Copying webpack core config create config/webpack create config/webpack/development.js create config/webpack/environment.js create config/webpack/production.js create config/webpack/test.js ..... ├─ webpack-dev-middleware@3.7.3 ├─ webpack-dev-server@3.11.2 ├─ websocket-driver@0.7.4 ├─ websocket-extensions@0.1.4 └─ ws@6.2.1 Done in 25.66s. Webpacker successfully installed 🎉 🍰 |
Railsサーバー起動・接続
vagrantfile設定
vagrantfileには以下の1行を設定している。
1 |
config.vm.network "forwarded_port", guest: 3000, host: 3000 |
サーバー起動・接続
ここでrails sでサーバーを起動するが、ブラウザーがつながらない。
参考サイト(Rails4.2:Vagrant上の仮想マシンで起動したRailsにホストのブラウザからアクセス出来ない)のおかげで、Railsサーバーを以下で立ち上げるとよいことが分かった。
1 |
rails s -b 0.0.0.0 |
この状態で、ホストのブラウザーからlocalhost:3000でつながった。
アプリケーション生成~成功
ここで再度アプリケーションを生成して成功。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost app]$ rails new rails_test -d mysql create create README.md create Rakefile ..... ├─ websocket-driver@0.7.4 ├─ websocket-extensions@0.1.4 └─ ws@6.2.1 Done in 4.98s. Webpacker successfully installed 🎉 🍰 [vagrant@localhost app]$ ls rails_test |
viなどでdatabase.ymlを修正。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# MySQL. Versions 5.5.8 and up are supported. # # Install the MySQL driver # gem install mysql2 # # Ensure the MySQL gem is defined in your Gemfile # gem 'mysql2' # # And be sure to use new-style password hashing: # https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html # default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: パスワードを指定 socket: /var/lib/mysql/mysql.sock development: <<: *default database: デフォルトのDB名を削除 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: デフォルトのDB名を削除 # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password or a full connection URL as an environment # variable when you boot the app. For example: # # DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" # # If the connection URL is provided in the special DATABASE_URL environment # variable, Rails will automatically merge its configuration values on top of # the values provided in this file. Alternatively, you can specify a connection # URL environment variable explicitly: # # production: # url: <%= ENV['MY_APP_DATABASE_URL'] %> # # Read https://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full overview on how database connection configuration can be specified. # production: <<: *default database: デフォルト指定されていればDB名を削除 ↓以下コメントアウト # username: rails_test # password: <%= ENV['RAILS_TEST_DATABASE_PASSWORD'] %> |
Railsサーバー起動。
1 |
[vagrant@localhost config]$ rails s -b 0.0.0.0 |
ホストのブラウザーからlocalhost:3000で接続。