はい!今やってます!

Work Pertly, Live Idly

CentOS7でRailsを起動するまでの手順メモ

適当なサーバーでCentOS7をセットアップする

省略

gemインストール

yum -y install gem

最新版rubyを入れる

cd /usr/share
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -L https://get.rvm.io | bash -s stable --ruby
source /usr/local/rvm/scripts/rvm

Railsを入れる

gem install rails
rails --version

Nodejsをインストール

yum install -y nodejs

※nodejsを入れないとbrowserifyが入ってないとかで怒られました。

MySQLをインストール

yum -y install mariadb-server mysql-devel

プロジェクトを作成(DBをmysqlに設定)してpumaを起動

rails new ${project_name} -d mysql
cd ${project_name}
bin/rails s -b 0.0.0.0
http://XXX.XXX.XXX.XXX:3000/

MariaDBを5系から10系にアップデートする

WITH句のRecursiveサポート

MariaDBの10系のversionupで10.2.2からWITH句のrecursiveがサポートされるようなので、 テストサーバーを5.5から10.2にバージョンアップしようと。 mariadb.com

CentOS7 の場合

  • 設定ファイルの中身を生成

MariaDB - Setting up MariaDB Repositories - MariaDB

  • repoファイルを作成
sudo vi /etc/yum.repos.d/MariaDB.repo
sudo yum update MariaDB-server MariaDB-client
  • バージョンを確認
rpm -qa | grep MariaDB
  • 再起動
service restart mariadb

n+1問題用スニペット

for文の中でSQLを回してしまう事でアプリのパフォーマンスを落としてしまうn+1問題と呼ばれる処理。 解決するためにはデータをチャンクして処理する必要がある。あまり上手く書いてるコードと出会った事が無くて苦手意識があったのだけど、今日シンプルなのと出会ったのでスニペットとして覚えておこう。 言語はGoで。

const maxCount = 1000
for i := 0; i < len(target); i += maxCount
{
    j := i + maxCount
    
    if len(target) < j 
    {
        j = len(target)
    }

    subTarget := target[i : j]
    executeSQL(subTarget)
    log.Print("execution finished [" + strconv.Itoa(i) + "-" + strconv.Itoa((i + len(subTarget))) + "]")
}