AWS Cloud9에서 Ruby on Rails를 움직여 보았습니다 (MySQL 편)

안녕하세요! 모리타 켄타로입니다!
이번에는 AWS의 Cloud9에서 Ruby on Rails의 DB를 MySQL로 이동하는 방법을 소개합니다.
Rails에서 앱을 만들 때 기본적으로 SQLite가 채용되고 있는 것 같습니다만, 이번은 보다 메이저인 MySQL을 사용해 보려고 합니다.
기본 SQLite를 사용하는 경우 ↓ 기사를 참조하십시오.
  • AWS Cloud9에서 Ruby on Rails를 움직여 보았습니다.

  • 미리 작성된 앱의 DB를 기본 SQLite에서 MySQL로 변경하려면 ↓ 기사를 참고해 보세요.
  • Ruby on Rails의 DB를 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.
    
    # 省略
    
    

    할 수 있어!
    그렇다고 해서 앱을 기동해…
    그렇지 않으면, 「Mysql2::Error
    그렇다면 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
    


    할 수 있었어! 기다리고 있던 에바의 마지막 돌 같은 일러스트!
    가득 화났지만 어떻게든 움직일 수 있었습니다(^^)
    앱 개발은 환경 구축에서 꾸준히군요~…
    그럼~

    좋은 웹페이지 즐겨찾기