こんにちは!モリタケンタロウです!
今回はAWSのCloud9で、Ruby on RailsのDBをMySQLで動かす方法について紹介します。
Railsでアプリを作るとき、デフォルトではSQLiteが採用されているようですが、今回はよりメジャーなMySQLを使ってみようと思います。
デフォルトのSQLiteを使う場合は、↓の記事を参考にしてみてください。
作成済みのアプリのDBをデフォルトのSQLiteからMySQLに変える場合は、↓の記事を参考にしてみてください。
とにかくやってみよう!
AWS Cloud9では最初からRubyもRailsもインストールされています。
ruby -v
とrails -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
できたー!待ち望んでいたエヴァの最終回っぽいイラスト!
いっぱい怒られたけどなんとか動かせました(^^)
アプリ開発は環境構築から地道ですね~…
それでは~