2016年12月27日火曜日

【Ruby2.4.0 & Rails5.0.1】 rails5.0.1で稼働中のWEBアプリをruby2.3.0からruby2.4.0にアップグレードする その1 chef-client Local modeでruby2.4.0をinstallする

記事概要

rails5.0.1で稼働中のWEBアプリをruby2.3.0からruby2.4.0にアップグレードした方法をまとめた記事です。

環境

  • centos6.5
  • rails5.0.1
  • ruby2.3.0 → ruby2.4.0
  • chef
  • rbenv
  • unicorn

工数

本番導入までの時間を含めて8hくらいです。

作業内容

ruby2.3.0からruby2.4.0のアップグレードでは、以下の作業を行いました。

  • chef-client Local modeでruby2.4.0をinstall
  • railsアプリをruby2.4.0に対応させる
  • リリース

移行用のbranchの作成

gitでruby2.4.0移行用の機能ブランチを作成します。

terminal

cd {project_folder}
git branch feature-ruby2.4.0

checkoutでブランチを切り替えます。

terminal

git checkout feature-rails5.0.1

準備完了です。

chefでruby2.4.0をinstall

まず現在のrubyのversionを確認します。

terminal

ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

rbenvでinstall可能なrubyを確認します。

terminal

rbenv install -l

2.3.0
2.3.1
2.4.0-dev
2.4.0-preview1

現在の状態ではruby2.4.0のinstallはできないので、ruby-buildを更新します。

chefのroles/web.jsonファイルを確認します

roles/web.json
    "ruby_build": {
      "upgrade": "sync"
    },
    "rbenv": {
      "rubies": ["2.2.2", "2.3.0"],
      "global" : "2.3.0",
      "gems" : {
        "2.2.2" : [
          { "name" : "bundler" }
        ],
        "2.3.0" : [
          { "name" : "bundler" }
        ]
      }      
    },

ruby_buildに"upgrade": "sync"が記載されていれば、chef-client Local modeを実行するだけでruby-buildが更新されます。
ruby-buildとrubyのインストールは同時にできないので、まずこの状態でchef-client Local modeを実行します。

terminal

// root化
su -

cd {chef-repo_base}

chef-client -z -j 192.168.33.10.json

実行完了後、rbenvでinstall可能なrubyを確認します。

terminal

rbenv install -l

  2.3.0
  2.3.1
  2.3.2
  2.3.3
  2.4.0-dev
  2.4.0-preview1
  2.4.0-preview2
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.5.0-dev

ruby2.4.0のインストールが可能になりました。

chefのroles/web.jsonファイルを変更します

roles/web.json
    "ruby_build": {
      "upgrade": "sync"
    },
    "rbenv": {
      "rubies": ["2.2.2", "2.3.0", "2.4.0"],
      "global" : "2.3.0",
      "gems" : {
        "2.2.2" : [
          { "name" : "bundler" }
        ],
        "2.3.0" : [
          { "name" : "bundler" }
        ],
        "2.4.0" : [
          { "name" : "bundler" }
        ]
      }      
    },

ruby2.4.0を追記しました。現在動いているアプリに影響がでないように、globalは2.3.0のままにしておきます。再度chef-client Local modeで実行します。

terminal

// root化
su -

cd {chef-repo_base}

chef-client -z -j 192.168.33.10.json

実行完了後に確認します。

terminal

rbenv versions
  2.2.2
* 2.3.0 (set by /usr/local/rbenv/version)
  2.4.0

ruby2.4.0のinstallに成功しました。

まとめ

ruby2.4.0のinstallは、chefを利用していればファイルの追記とコマンドの実行だけで終了します。
次回はrailsの変更の説明をします。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年12月25日日曜日

【Golang】Golang Gin Web Frameworkのインストール

  • 公開日:2016年12月26日

記事概要

新規アプリを学習も兼ねてGoLangのGin Web Frameworkで作ることにしました。
開発の中で得た気づきや知識を記載していきます。

環境

  • Centos6.5
  • Go 1.7.4

GoLangインストール

GoLangをcentos6.5にインストールします。
現在の最新バージョン1.7.4を使います。

terminal

// ダウンロード
wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz

// rootになる
su - 

// /usr/localフィレクトリに解凍
// -C, --directory  ディレクトリ名 指定したディレクトリに移動してから動作を始める
tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz

// 環境変数の設定フォルダ
cd /etc/profile.d/

// goの環境変数を読み込むshを作成
touch go.sh

vi go.sh

/etc/profile.d/配下のgo.shは、サーバーログイン時に呼び出されるシェルです。(正しくは、ログイン時にシェルで*.shとして、全てのシェルが呼び出される。)
このgo.shファイルで環境変数を設定します。

/etc/profile.d/go.sh

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin:$GOROOT/bin

GOPATHはgo getコマンドでライブラリが格納されるディレクトリです。

保存したら、一度サーバーからログアウトします。
再度サーバーにログインして、golangの設定をチェックします。

terminal

// version確認
[vagrant@vagrant-centos65 profile.d]$ go version
go version go1.7.4 linux/amd64

以上でgolangの設定が完了しました。

Gin Web Frameworkインストール

Gin Web Frameworkをインストールします。

go getコマンドは、古いcentos(6.x系)にデフォルトでinstallされているgitだと動作しません。
gitのversionが古い場合は、versionを新しくしてください。やり方がわからない場合は、この記事を参照してください。

terminal

cd $HOME
// install Gin Web Framework
go get gopkg.in/gin-gonic/gin.v1

エラーなく処理が完了すれば成功です。

プロジェクト作成

続けてプロジェクトを作成します。

terminal

cd $GOPATH/src/
mkdir sample
cd sample
touch main.go

main.goにサーバー起動処理を記述します。

main.go
package main

import (
    "os"
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.String(200, "hello")
    })

    port := os.Getenv("PORT")
    if len(port) == 0 {
        port = "3000"
    }
    r.Run(":" + port)
}

ビルドして動かします。

terminal

cd $GOPATH/src/sample
go run main.go

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env: export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :3000


ブラウザでhttp:sample.com:3000にアクセスします。

表示されました。

まとめ

Gin Web Frameworkのインストールは非常にシンプルです。
centos6.5だと、gitがデフォルトの古いままだとgo getコマンドが途中で停止してしまうので注意してください。

以上。

PICK UP オススメ書籍

運営サイト(railsで作成しています)

関連記事

参考記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年12月24日土曜日

【Rails5.0.1】 rails5.0.0.1からrails5.0.1にアップグレードする

記事概要

rails5.0.0.1からrails5.0.1にアップグレードした時の方法をまとめた記事です。

環境

  • centos6.5
  • rails5.0.0.1 → rails5.0.1
  • ruby2.3.0
  • rbenv
  • unicorn
  • whenever

工数

全ての修正を含めて1hで完了しました。

作業内容

rails5.0.0.1からrails5.0.1のアップグレードでは、以下の作業を行いました。

  • rails5.0.1へアップデート
  • Rspecの実行

移行用のbranchの作成

gitでrails5.0.1移行用の機能ブランチを作成します。

terminal

cd {project_folder}
git branch feature-rails5.0.1

checkoutでブランチを切り替えます。

terminal

git checkout feature-rails5.0.1

準備完了です。

Gemfile修正

まずGemfileを修正します。

{project_folder}/Gemfile

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.0.0.1'

↓

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.0.1'

gem 'rails', '5.0.1'に修正し、updateします。

terminal

// update
bundle update 

bundle updateは、全ての依存関係をインストール・ダウンロードし直すことができます。

念のために影響がありそうなgemのupdateはテキストに記録しておきましょう。

terminal

Installing rake 12.0.0 (was 11.2.2)
Installing arel 7.1.4 (was 7.1.1)
Installing sprockets 3.7.1 (was 3.7.0)
Bundle updated!

今回は変更が少ないですね。
フレームワークとして枯れてきた証拠です。

すべてのgemの更新に成功したら、updateの準備は完了です。

Upgrade to Rails 5.0.1

Gemファイルの導入が完了したら、rails app:updateで設定ファイルを更新します。

terminal

bundle exec rails app:update

ファイル更新の有無を聞かれるので、更新が必要なファイルのみ変更します。
私の環境では以下のようにしました。

  • config/initializers/new_framework_defaults.rb → 更新する
  • config/routes.rb → 更新しない
  • config/application.rb → 更新する
  • config/environment.rb → 更新する
  • secrets.yml → 更新しない
  • config/environments/development.rb → 更新しない
  • config/environments/production.rb → 更新しない
  • config/environments/test.rb → 更新しない
  • config/initializers/assets.rb → 更新しない
  • config/initializers/cookies_serializer.rb → 更新しない
  • config/initializers/wrap_parameters.rb → 更新しない
  • config/locales/en.yml → 更新しない

変更後は、diffで変更部分を確認しましょう。5.0.0.1からの更新の場合は、特に変更はないはずです。

最後にデグレテストとしてRspecを実行します。

terminal

bundle exec rspec

Finished in 2 minutes 0.5 seconds (files took 6.98 seconds to load)
219 examples, 0 failures

私の環境では、テストに問題はありませんでした。
今回はrailsアップデート時に発生する警告もありませんでした。毎回きちんとupdateをしていれば、今回は大きな変更はないはずです。

Rails5.0.1起動

テスト実行後は、アプリを起動します。

terminal

rbenv exec bundle exec rails s -b 0.0.0.0
=> Booting WEBrick
=> Rails 5.0.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2016-12-24 04:26:05] INFO  WEBrick 1.3.1
[2016-12-24 04:26:05] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-12-24 04:26:05] INFO  WEBrick::HTTPServer#start: pid=23502 port=3000

コンソールにRails 5.0.1 applicationが表示され、画面が表示されれば成功です。

あとはWEBを動かしながら動作を確認しましょう。

確認後は、masterにmergeして完了です。

まとめ

Rails5.0.0.1からRails5.0.1のアップデートは、簡単にアップデートできます。
もうすぐrubyのバージョンも2.4になるので、両方共に対処しておきましょう。

また、Railsのフレームワークは枯れてきて随分と落ち着きました。Ruby好きで新しい技術を習得していきながらWEBサービスを開発したいなら、Go言語 がオススメです。pythonとgoが今後、使う頻度が高くなる言語になる気がします。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...