最近ようやく Carton の使い方を少しずつ覚えている今日この頃.ローカル環境で carton bundle
して詰め込んで,Git フックスクリプトに caron install --cached
などと書くことで,詰め込んだモジュールたちをみごとにデプロイ先でインストールなどしてくれてとてもありがたいです.
そんな中,自ビルドな MySQL (--prefix=$HOME/local/mysql
)を DBD::mysql 経由で使用するようなアプリケーションを作っていて,デプロイ時に carton install
したりごにょごにょしたりする Git フックスクリプトでちょこっとハマりました.
スクリプトの一部は次のような感じです:
# post-receive ... source $HOME/perl5/perlbrew/etc/bashrc perlbrew use 5.14.3@myapp carton install --cached # データベース構成の変更等のSQLを適用する PLACK_ENV=deployment carton exec -- perl $BASEDIR/script/migrate_db.pl ... |
このスクリプト,エラーもなく実行されたのでうまくいったと思いきや,対象のデータベースを見てみると,構成の変更が反映されていませんでした.
(中略)
以前,cpanm で DBD::mysql のインストールに失敗してた ことを思い出し,mysql_config
のパスが合ってないんでないか?と疑うに至りました.(自ビルドのヤツは $HOME/local/mysql/bin/mysql_config
,デフォルトのヤツは /usr/bin/mysql_config
)
そこで,フックスクリプトを,次のように書き換えました:
# post-receive ... source $HOME/perl5/perlbrew/etc/bashrc perlbrew use 5.14.3@myapp PATH=$HOME/local/mysql/bin:$PATH \ carton install --cached # データベース構成の変更等のSQLを適用する PLACK_ENV=deployment carton exec -- perl $BASEDIR/script/migrate_db.pl ... |
carton install の際に環境変数 PATH
に手を加えています.
結果,データベースの構成変更が反映されており,今度こそうまくいったようです.
...ということで,Git フックスクリプト経由で DBD::mysql を Carton で入れる場合は,mysql_config
へのパスをしっかり通しておく,これが肝心なのかな,と思いました.
ちなみに,解決まで 3時間くらいかかりました...orz
データベース構成変更などするスクリプトでは
$dbh->do($sql) or croakf '...'; # use Log::Minimal |
のようにしてるけど,これだとエラー拾わないのかなぁ...要調査.
こちらもあわせてどうぞ
最近の閲覧数
- None Found