PHP/Idiorm + Paris を用いて同一プロジェクト内で複数DBに接続 (and Using Namespace)
Idiorm + Paris を使って、同一プロジェクト内で複数のDBに接続し、なおかつ名前空間によって各機能をパッケージング。
ちょっと詰まったのでメモ。
<?php namespace MyNamespace; require_once '/path/to/BaseWrapperModel.class.php'; # データベース設定 \ORM::configure('mysql:host='.DB_HOST.';dbname='.DB_NAME, null, 'connection_name'); \ORM::configure('username', DB_USER, 'connection_name'); \ORM::configure('password', DB_PASSWORD, 'connection_name'); \ORM::configure('driver_options', [ \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', ], 'connection_name'); \Model::$short_table_names = true; class Base extends \BaseWrapperModel { }
以下のメソッドの引数がキモらしく、
\ORM::configure('mysql:host='.DB_HOST.';dbname='.DB_NAME, null, 'connection_name');
connection_name に任意の接続名を指定してあげて、なおかつ第3引数がないとダメだったようです。
また、has_many を指定する際も同様に第3引数に何かしら渡してあげる必要がありました。
$this->has_many('MyNamespace\Hoge', 'fuga_id', null, 'connection_name');
PHP の Namespace の仕様も勉強できたし、詰まったけどタメにはなりましたとさ。
WordPressのプロジェクト移行時、DB情報はあってるはずなのに「データベース接続確立エラー」
Unicornってなんじゃらほい
前任者が退職してしまって、誰も構成の把握ができていない Ruby on Rails のプロジェクトを引き継ぎました。 (ちなみに この時点で私も入社数週目 😭)
どういう構成で動いてるか調べるために ~/.bash_history をあさってみると、service コマンド経由で Unicorn というサーバウェアを起動/停止してました。
しばらくは右に倣えで service unicorn (re)start/stop してた・・・のですが、たまに挙動が怪しい時があったのでプロセスを見てみると unicorn プロセスが 2~3 生き残っていることが・・・。
どうやら unicorn はうまいことプロセスが死なないことがあるらしい・・・。
とりあえずスピード勝負の案件だったので、git pull と サーバのリスタートを丸っと行う、自作の作業用 BASH に unicorn のプロセスを kill する処理を追加するという荒業でひとまず解決 (?)
Unicorn 入門の道は続く・・・。
vagrant up/reload で「scp.rb:nnn:in `await_response_state' ... (RuntimeError)」エラー
ES6のClassブロックって直下にPrivateなメンバを定義できないんかい
ES6のClass構文ってPrivateなプロパティ/メソッドをClassのブロック内に直接定義できないんですね。
class Test { var privateProperty; // これだと Syntax Error let privateProperty; // これでも (ry const privateProperty; // これも (怒) }
... Class構文、全然便利じゃないじゃないか。
const/letは便利なので、Classチックなとこだけはこれからもしばらくは今までのやり方で書くことにします。
var SubClass = function() { var SUPER = new BaseClass(); var Entity = function() { const self = this; const privateMethod = function() { return; }; self.publicMethod = function() { return; }; return self; }; Entity.prototype = SUPER; return new Entity(); }; var subClass = new SubClass();
vagrant up/reload で「すでにそのIPアドレス使われてるよ」エラー
ミドルウェアのインストール BASH の作成中、まっさらな状態で試験しようと思って何も考えずに何度か Vagrant から box remove / box add したりしてたら、いつの間にかネットワークインターフェイス?の起動に失敗するようになっちまいました。
ちょっとつまずいたので備忘録として。
ホストマシンは MacOS Sierra。ゲストの仮想マシンは CentOS です。
エラー内容は以下の通り。
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
/sbin/ifdown 'eth1'
mv -f '/tmp/vagrant-network-entry-eth1-nnnnnnnnnn-n' '/etc/sysconfig/network-scripts/ifcfg-eth1'
/sbin/ifup 'eth1'Stdout from the command:
Determining if ip address 192.168.33.10 is already in use for device eth1...
Error, some other host (nn:nn:nn:nn:nn:nn) already uses address 192.168.33.10.
Stderr from the command:
「 すでに 192.168.33.10 は使われてるよ」てな具合。
vagrant ssh でゲストマシンの中に入って /etc/sysconfig/network-scripts/ifcfg-eth1 の中身と名前を eth2 にしたりする無駄なあがきをしてみたけどだめ (誰かが動的に吐き出してるっぽい。復活する)
ホストマシン上から VBoxManage list vms してみると生ける屍系仮想マシンが何匹か生き残っていたので、こちらを参考に該当の屍プロセスを成仏してから vagrant destroy。
改めて vagrant up してみると元気よく動き出しましたとさ。