1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CentOS 7とRails 5とMySQL 5.7で使う(3)

Last updated at Posted at 2018-06-11

前置き

本記事は前回の記事の続編です。
ご覧になっていない方は、前回の記事もご覧になってください。
今回はRailsのプロジェクトを作成してMySQLと連携していることを確認します。
一応、今回で最終回のつもりです。最後までお付き合い頂ければと思います。

プロジェクトを作成する

  1. railsユーザで作業します。
    今までrootユーザで作業をしてきましたが、1回目の記事で作成したRailsユーザで作業します。

    $ id
    uid=1000(rails) gid=1000(rails) groups=1000(rails),10(wheel)
    $ pwd
    /home/rails
    
  2. プロジェクトを作成します。
    この記事の主題であるMySQLを使うようにします。

    $ rails new myapp -d mysql
               create  
               create  README.md
               create  Rakefile
                 :
                 :
    Your user account isn't allowed to install to the system RubyGems.
          You can cancel this installation and run:
        
          bundle install --path vendor/bundle
        
          to install the gems into ./vendor/bundle/, or you can enter your password
          and install the bundled gems to RubyGems using sudo.
    
          Password:           # railsユーザのパスワード
    
        Installing rake 12.3.1
    Using concurrent-ruby 1.0.5
    Using i18n 1.0.1
                 :
                 :
    Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
    Use `bundle info [gemname]` to see where a bundled gem is installed.
             run  bundle exec spring binstub --all
    * bin/rake: spring inserted
    * bin/rails: spring inserted
    

アプリの事前準備をする

  1. JavaScriptの実行環境をインストールします。
    このままローカルサーバーで動作させようとするとJavaScriptの実行環境が無いのでエラーになります。
    予め回避のためNode.jsとnpmをインストールしておきます。
    ※EPELリポジトリを追加する必要があります。ConoHaのCentOS 7は追加済みでした。
    [参考]EPELリポジトリを追加する場合は以下を実行します。

    $ sudo -i
    [sudo] rails のパスワード:
    # yum install epel-release
    # exit
    

    本線のNode.jsとnpmをインストールします。(sudoでもrootユーザでも)

    # yum install -y nodejs npm
    
  2. DB設定を行います。
    DBの設定ファイルのアカウントをrailsユーザの情報に書き換えます。

    $ cd ~/myapp
    $ vi config/database.yml 
    
    database.yml
    default: &default
          username: rails
          password: Hogehoge123!
    
  3. MySQLにアプリ用DBを作成します。

    $ rails db:create
    Created database 'myapp_development'
    Created database 'myapp_test'
    
    mysql> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | myapp_development  |
    | myapp_test         |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    6 rows in set (0.00 sec)
    
  4. web-consoleのホワイトリストを設定します。
    デフォルトの設定値が127.0.0.1/8なので、ローカル環境(サーバーのIPがループバックIP)で開発環境を構築している場合は不要と思います。

    $ vi ~rails/myapp/config/application.rb 
    
    application.rb
    config.web_console.whitelisted_ips = 'xxx.xxx.xxx.xxx'    # 接続元のIP
    
  5. 引き続き、タイムゾーンを設定します。

    application.rb
    config.time_zone = 'Tokyo'
    config.active_record.default_timezone = :local
    
  6. 引き続き、ロケールを設定します。

    application.rb
    config.i18n.available_locales = [:en, :ja]
    config.i18n.default_locale = :ja
    
  7. ファイヤーウォールを一時的に停止します。
    デフォルトのRailsサーバーのポート:3000の通信が不通になる可能性がありますので、一時的にファイヤーウォールを停止します。
    実環境ではグローバルからの接続はHTTPS(ポート:443)経由になりますので、確認が完了したら元の設定に戻ります。開発環境もHTTPSで構築した方が良いですね。

    systemctl stop firewalld
    

サーバーを起動する

  1.  プロジェクトのディレクトリへ移動します。
    rails new myapp -d mysqlを実行したカレントディレクトリは、ホームディレクトリになっていると思います。

    $ ls -l ~
    合計 4
    drwxrwxr-x 14 rails rails 4096  6月 10 23:06 myapp
    $ cd ~/myapp
    $ pwd
    /home/rails/myapp
    
  2. サーバーを起動します。

    $ rails s
    => Booting Puma
    => Rails 5.2.0 application starting in development 
    => Run `rails server -h` for more startup options
    Puma starting in single mode...
    * Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
    * Min threads: 5, max threads: 5
    * Environment: development
    * Listening on tcp://0.0.0.0:3000
    Use Ctrl-C to stop
    
  3. ブラウザからアクセスしてみます。
    http://(ConoHa VPS グローバルIP):3000
    良いじゃないですか:clap::clap:
    image1.png

  4. 余談です。
    バインドオプションを指定しなくてもrails sで問題無く表示されています。VirtualBoxで検証したときはlocalhost:3000でアクセスしていました。この時はホストOSからゲストOSへのアクセスが「外部アクセス」扱いになりアクセス不可でした。この場合はrails s -b 0.0.0.0とバインドオプションを指定してサーバーを起動してあげましょう。

MySQLと連携しているか確認する

  1. Scaffoldで犬モデルを作ります。
    DBをマイグレーションすれば、dogsテーブルが作成されるはずです。

    $ rails g scaffold dog name:string age:integer
    
  2. DBをマイグレーションします。

    $ rails db:migrate
    == 20180611144225 CreateDogs: migrating =======================================
    -- create_table(:dogs)
       -> 0.0078s
    == 20180611144225 CreateDogs: migrated (0.0079s) ==============================
    
  3. MySQLにテーブルが作成されたか確認してみます。

  4. テーブルがあるか確認します。
    dogsテーブルが作成されていますね:dog2::dog2:

    mysql> USE myapp_development;
    USE myapp_development;
    Database changed
    
    mysql> DESC dogs;
    +------------+--------------+------+-----+---------+----------------+
    | Field      | Type         | Null | Key | Default | Extra          |
    +------------+--------------+------+-----+---------+----------------+
    | id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
    | name       | varchar(255) | YES  |     | NULL    |                |
    | age        | int(11)      | YES  |     | NULL    |                |
    | created_at | datetime     | NO   |     | NULL    |                |
    | updated_at | datetime     | NO   |     | NULL    |                |
    +------------+--------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    

犬の情報を登録してみる

  1. 一覧へアクセスします。
    http://(ConoHa VPS グローバルIP):3000/dogs
    まだ、ワンちゃんはいません。
    list1.png

  2. 犬の情報を登録してみます。
    create1.png
    create2.png

  3. 一覧にも表示されました。
    list2.png

  4. MySQLにレコードが挿入されたか確認してみます。
    あっ!調子にのって3頭も登録していたことがバレてしまいました。我が家の愛犬です。

    mysql> SELECT * FROM dogs;
    +----+--------+------+---------------------+---------------------+
    | id | name   | age  | created_at          | updated_at          |
    +----+--------+------+---------------------+---------------------+
    |  1 | 千代   |    6 | 2018-06-12 00:18:09 | 2018-06-12 00:18:09 |
    |  2 | エル   |    4 | 2018-06-12 00:18:57 | 2018-06-12 00:18:57 |
    |  3 | 乙女   |    7 | 2018-06-12 00:19:09 | 2018-06-12 00:19:09 |
    +----+--------+------+---------------------+---------------------+
    3 rows in set (0.00 sec)
    
    

終わりに

本番環境、それに準じたテスト環境の構築はnginxを前段に持ってきてリバースプロキシして、常時SSLで構成することを想定しています。それ自体はRails固有のものではなく、Node.js(Express)なんかでも同様と思いますので、3回に渡ってお送りしたこの記事も一度閉じます。どこかでまた記事にしたいです。
LinuxやRailsに関しては私自身これからWEBアプリを作って行くところで入口に立ったばかりの身ですが、この記事が参考になれば幸いです。
最後にファイヤーウォールを有効に再設定してくださいね。

1
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?