AWS Cloud9でRuby on Railsを動かしてみた(MySQL編)


こんにちは!モリタケンタロウです!
今回はAWSのCloud9で、Ruby on RailsのDBをMySQLで動かす方法について紹介します。
Railsでアプリを作るとき、デフォルトではSQLiteが採用されているようですが、今回はよりメジャーなMySQLを使ってみようと思います。

デフォルトのSQLiteを使う場合は、↓の記事を参考にしてみてください。

作成済みのアプリのDBをデフォルトのSQLiteからMySQLに変える場合は、↓の記事を参考にしてみてください。

とにかくやってみよう!

AWS Cloud9では最初からRubyもRailsもインストールされています。
ruby -vrails -vのコマンドで確認できます。

$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
$ rails -v
Rails 5.0.0

確認できたら早速アプリを作成してみましょう。
rails new [アプリ名]コマンドで作ります。

$ rails new my_app -d mysql
      create  
      create  README.md
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile

# 省略

Fetching mysql2 0.4.10
Installing mysql2 0.4.10 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

# 省略

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`

bundle installしてる時になんだかよく分からないエラーが出てきたみたいです…
「Make sure that ~」で言われた通り、mysql2のgemをインストールしてみます。

$ gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

# 省略

-----
mysql.h is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
-----

# 省略

またエラー…
今度はyum install mysql-develしてみろって書いてあるのでやってみます。
※ sudo付けないと「You need to be root to perform this command.」って怒られた…

$ sudo yum install mysql-devel
Loaded plugins: priorities, update-motd, upgrade-helper

# 省略

Installed:
  mysql-devel.noarch 0:5.5-1.6.amzn1                                                                                                                                                                      

Dependency Installed:
  mysql55-devel.x86_64 0:5.5.62-1.23.amzn1                                                                                                                                                                

Complete!

満を持してmysqlのgemのインストールに再挑戦します。

$ gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
Successfully installed mysql2-0.4.10
Parsing documentation for mysql2-0.4.10
Installing ri documentation for mysql2-0.4.10
Done installing documentation for mysql2 after 0 seconds
1 gem installed

できたっぽい!問題のbundle installをやってみます。
※ 作ったアプリのディレクトリの中に入るの忘れがち

$ cd my_app/
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for 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/............

# 省略

Bundle complete! 15 Gemfile dependencies, 62 gems now installed.

# 省略

できるやん!
ということでアプリを起動して…ってのはもう少し我慢で、その前にMySQLのサービスを起動しないといけないみたいです。
じゃないと、「Mysql2::Error Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)」って怒られて一瞬ショックな気持ちになります。
ということで、sudo service mysqld startコマンドでMySQLのサービスを起動します。
※ これもsudo付けないと「Permission denied」って怒られた…

$ sudo service mysqld start                                         
Initializing MySQL database:  Installing MySQL system tables...

# 省略

Please report any problems at http://bugs.mysql.com/

                                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

サービスを起動したら、今度はDBを作ります。
DB作らないでアプリを起動しても「ActiveRecord::NoDatabaseError Unknown database 'my_app_development'」って怒られるだけです。
rails db:createコマンドでconfig/database.ymlに書いてある内容でDBが作られます。

$ rails db:create
Created database 'my_app_development'
Created database 'my_app_test'

そしていよいよアプリを起動します。

$ rails server
=> Booting Puma
=> Rails 5.0.7.2 application starting in development on http://localhost:8080
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.4 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:8080
Use Ctrl-C to stop


できたー!待ち望んでいたエヴァの最終回っぽいイラスト!
いっぱい怒られたけどなんとか動かせました(^^)
アプリ開発は環境構築から地道ですね~…
それでは~