php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

migrationが入っていないプロジェクトにあとからmigrationを導入

migrationが入っていないプロジェクトに

あとからmigrationを導入

migrationが入っていないプロジェクトにあとからmigrationを導入したメモです

導入プロジェクト環境
amazonlinux
mysql5.5
php7.0

をdockerでコンテナ作成して構成しています。
webで検索してシンプルそうでいいかなとliamstask/gooseを導入

phpmigでも良かったんですがclassファイルに構成しているのが微妙に嫌で記述がシンプルにSQLなliamstask/gooseにしました

まずgoが入っていないのでgoのインストール

go(googleが開発した言語)のインストール

ダウンロードディレクトリに移動(任意の場所です)
# cd /usr/local

投稿時点の最新を取得してきました
# wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz
# tar -C /usr/local -xzf go.release.go1.tar.gz

これでインストール自体は完了

パスを通します
# export PATH=$PATH:/usr/local/go/bin

これで
# go
で使えるんですがログアウトするとリセットされる揮発状態ですので

ログアウトしてもパスが通っているように以下
# vim ~/.bashrc
>> export PATH=$PATH:/usr/local/go/bin
※はじめ/usr/local/srcでインストール実行したらインストール先がわからなくて迷いました

さてここからがmigrationツールのインストールです
liamstask/gooseをインストール
# go get bitbucket.org/liamstask/goose/cmd/goose

実行するとホームディレクトリにgoが作成されその中のbinに実行ファイルができる
なのでgoインストール先のbin配下にリンクさせる
(インストール時にhomeに入れてパスをexport GOPATH=$HOME/goにすればいいみたいだが特に困らないのでいいかと思いこのままで)
# ln -s ~/go/bin/goose goose

mysqlにmigrationのユーザーを作成しました(任意作業)
※ローカルなんでパスワード設定なしホスト制限なしです。本来はしっかりやります。

mysql> CREATE USER 'migration'@'%' IDENTIFIED BY '';
mysql> GRANT ALL ON `*`.`*` TO 'migration'@'%';


migrationを使う
例えばプロジェクトディレクトリの直下に
# cd プロジェクトディレクトリ
# mkdir -p migration/db
とmigrationとdbを作成しました
基本的にmigrationに移動してgooseコマンドを実行していきます

db設定ファイルのデフォルトをコピー
# cd migration
# cp ~/go/src/bitbucket.org/liamstask/goose/db-sample/dbconf.yml ./db/

設定内容
とりあえずdevelopmentだけ書き換えて確認してみます
ホストはdockerなのでコンテナ名になっています
development:
    driver: mymysql
    open: tcp:container_name:3306*dbname/migration/

migrationはユーザー名、パスワードを設定している場合は
migration/password
のようになります

# goose status
こちらで利用できるか確認
※エラーが出なければOK

とりあえず既存テーブルも存在していたら何もしないという新規アサインメンバーのDB構造作成のため実行します

ではテーブルの追加をしていきます
※今回はプロジェクトの途中からなので現時点のプロジェクトデータベース構造を一番初めに記述して実行していますが割愛します。IF NOT EXISTS付きで用意しました。こうすることであとからアサインするメンバーにもまっさらなプロジェクトがすぐできるようになります。

# goose create [ファイル名] sql
こうすることで
プロジェクト/migration/db/migrations/
の中に作成日時が付いた先ほどのファイルが作成されています
ファイルの命名はプロジェクトで合わせたほうがいいかもしれません

私は以下のようにしました


※ファイルの先頭には自動で年月日日時が入ります。それ以降は以下にすることにしました
[操作][対象テーブル名]_[チケット番号]
[操作][対象テーブル名][AddColumnName or AddColumns]_[チケット番号]
例:
CreateTableSampletable_2718
AlterTableSampletableSamplecolumn_2718
AlterTableSampletableAddColumns_2718
複数の場合は複数追加した旨だけ書く

ファイル上段の
-- +goose Up
の方に構造変更など実行したいsqlを記述します
またファイル下段の
-- +goose Down
こちらにはrollback的な戻すsqlを記述します
※しかしdropなどデータが変更されるのであればデータは戻せないはずです

# goose up
※これで先ほど記述した上段のupが実行されます

# goose down
※これでロールバック的な?下段のdownが実行されます

とりあえずはここまでで
本番へのプッシュ時点でのキックなどリリースの簡略化を今後検討していこう

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする