phpenvのphp.ini
最近は暖かくなってきたなーと思った矢先、また寒くなってきてコートとマフラーがまだ手放せないですね。とっしぃです。
今やってる開発はphpenvでPHPのバージョン管理をやろうと思って、 phpenv + php-fpm + nginx って環境になってます。
phpenvは特にユーザ毎に管理する必要もないなーと思ったのでグローバルにインストールしてあります( > /usr/local/phpenv/~ )。
そこで色々php.iniとかいじってたんですが、読み込んでいるはずのphp.iniをいくら編集しても反映されてないぽい?わけです。
でもCLIの方で
php -i | grep php.ini
ってやって出てくるのは今いじってるphp.iniファイル。
それならと思ってWebサーバの方にphpinfo()書いたファイル置いて見てみると
Loaded Configuration File | /usr/local/phpenv/versions/5.4.21/etc/php-fpm.conf |
となっていてファッ(´・ω・`)!?
調べてみるとこんな記事を発見。
virtualbox(centos)でphp-buildでコンパイルしたphp-fpmをnginxで使う為の設定メモ(virturalhostの設定まで) - Qiita
そこでphp-fpmの設定ファイル郡/root/.phpenv/versions/5.4.11/etc/conf.d/にdate.iniというのを作って対応しました。
んならもうphp.iniを~/etc/conf.d/に突っ込んじゃったらどうなのよってことで突っ込んでみたところ無事に認識してくれました。
ちなみにphpinfo()だとこんな感じ。
Additional .ini files parsed | /usr/local/phpenv/versions/5.4.21/etc/conf.d/php.ini, /usr/local/phpenv/versions/5.4.21/etc/conf.d/pyrus.ini, /usr/local/phpenv/versions/5.4.21/etc/conf.d/xdebug.ini |
うーん、~/etc/php.iniだと認識しなくて~/etc/conf.d/*.iniだと認識してくれるってのはなんかどっかにそこら辺の設定がありそうだけど・・・。
しっくりはこないけどまた今度時間のある時にでも調べてみますかね・・・。
cakephpのバリデーションでvsprintfのエラー
ご無沙汰しております。とっしぃです。
ここんところ仕事がヘビーローテーション()すぎてそろそろ殺意の波動に目覚めそうです。
仕事は絶賛cakephp中なんですが、モデルのバリデーションを書いていて一瞬ハマったのでメモしときます。
新しくモデル書いて、ひと通りバリデーションのルールとかメッセージとか書き終わったあと、
さて動かしてみるかーと見てみたら
Warning (2): vsprintf() [function.vsprintf]: Too few arguments [CORE/Cake/basics.php, line 619]
ん?
どっかに%sとか書いたっけな?
と思ってみてみるも、そんな記憶もなければ記述もないわけで。
そこでふと文字コードを確認したら
:set fenc fileencoding=iso-2022-jp
フ○ック(´・ω・`)
このク○野郎(´・ω・`)と思いつつ、
:set fenc=utf-8
で物の見事に解消。
とそんなオチでしたとさ。
ほんともうまじバベルの塔壊した神は絶許ですよ絶許。
VimでCakePHPのctpファイルを整形(インデント)
明けましておめでとうございます。
ってもう17日ですね(´・ω・`)
今年も備忘録として色々メモって行きます。
まず一発目は軽いとこから。
ここ2~3年は仕事でもっぱらPHP、特にCakePHPを触る事が多いんですが、
今回はコーダーからもらったHTMLがなかなか酷く、
完全に ノ ー イ ン デ ン ト ・・・
だったので、それをCakeのctpファイルにする際にインデントをつけたかったわけです。
単純にHTMLファイル(拡張子がhtml)なら、Vimさんもそのまま
gg shift + V shift + G =
でインデントされるんですが、今回はctpファイルってことで
:set filetype
すると
filetype=php
って出てきちゃうんですね。
なのでhtmlファイルだと認識させればいいのかと。
:set filetype=html
これで上記の
gg shift + V shift + G =
でちゃんと整形されました!
Pythonデビュー
とっしーです。
仕事では基本PHPで、バッチとか簡単なスクリプトはbash使ってるんですが、
なんかその間みたいな言語を覚えたいなーという気持ちがずっとありました。
候補としては、まぁ予想は付くと思いますがRubyかPythonですわね。
それぞれのユーザー様からしたらとても失礼かもしれないんですが、
Perlはなんか今から覚えるようなもんでもなさそうだし、
CとかC++まで行くとさすがにそこまでじゃないしーって感じなんですよね。
JavaはJVM起動とか入るんでちょいと除外。Web用途、アプリ用途で既に使ってましたし。
そしてRubyはRoR、というかSinatraですけど、のためにちょこちょこ触ってたりします。
なのでスクリプト用途に使えそうな言語、ということでPythonを始めてみようかと思ったので
環境構築でもメモメモ。
サーバ
とりあえずいつも使ってるさくらのVPSにそのまま環境を作ってみます。
インストール
もしかして昔なんか入れたっけなー、つかCentOSって最初っから入ってたんだっけなー
ということでコマンド打ってみます。
$ python --version Python 2.7.4
うお、なんか入ってる!
でもたしか最新は3系とかじゃなかったっけ・・・?
調べてみるとやっぱり最新の安定版は3.3.3とのことなので、上記バージョンとは別にインストールしてみます。
$ wget http://www.python.org/ftp/python/3.3.3/Python-3.3.3.tgz $ tar -xvzf Python-3.3.3.tgz $ ./configure --prefix=/usr/local $ sudo make
ここでなんか怒られました。
Python build finished, but the necessary bits to build these modules were not found: _lzma To find the necessary bits, look in setup.py in detect_modules() for the module's name.
look in setup.py in detect_modules()とか言われたので見てみます。
1370行目辺りですかね。
# LZMA compression support. if self.compiler.find_library_file(lib_dirs, 'lzma'): exts.append( Extension('_lzma', ['_lzmamodule.c'], libraries = ['lzma']) ) else: missing.append('_lzma')
lzmaってパッケージがないのかね。
sudo yum install lzma Loaded plugins: fastestmirror, priorities, security Loading mirror speeds from cached hostfile * epel: ftp.iij.ad.jp * remi: remi.kazukioishi.net * rpmforge: ftp.kddilabs.jp 183 packages excluded due to repository priority protections Setting up Install Process Package lzma-4.32.7-1.el6.rf.x86_64 is obsoleted by xz-lzma-compat-4.999.9-0.3.beta.20091007git.el6.x86_64 which is already installed Nothing to do
あるじゃん( ^ω^)
調べたらlzmaってファイル圧縮とかのなんかなのね。
まぁなくてもどうにかなんじゃね(´・ω・`)
ていっ
$ sudo make altinstall
なにやらさっきのconfigureの--prefixオプションと、このaltinstallで
既にあるバージョンと競合とかせずにインストールできるぽいですね。
特にエラーっぽいメッセージはなし、と。
というわけで確認。
$ python --version Python 2.7.4
うんこれはこれで正しい。
$ python3.3 --version Python 3.3.3
おっけーい。
そしてこれを簡単に切り替えられる仕組みとしてvirtualenvってのがあるらしいんですが
今日のところは時間的にいっぱいいっぱいなのでまた後日。
もうちょい早くにやり始めれば良かった(´・ω・`)
KVMでVMにHDD追加
たまーにやるけどやる度に調べてるようなことってホント無駄ですよね。
というわけでメモ。
KVMでVMのHDD容量増やす方法はいくつかあって、
例えば
- HDD自体を拡張
- HDDを追加してLVMで一つにまとめる
辺りでしょうか。
一つ目のはfdiskでパーティションやらなんやらがめんどそうなので
いつも二つ目の方法でやってます。
が、そんなに頻度が高いわけでもなく、普段使わないコマンドばかりなので
すぐに忘れちゃうんですよね(´・ω・`)
HDDイメージの作成
まずは追加するHDDイメージを作成します。
# qemu-img create -f qcow2 /var/lib/libvirt/images/extend.qcow2 150G
VM定義ファイルにHDDイメージを定義
/etc/libvirt/qumu/以下辺りにあるXMLファイルに記述
<devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/var/lib/libvirt/images/vm.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> /* 以下を追加 */ <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/var/lib/libvirt/images/extend.qcow2'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> /* ココマデ */
VMを再定義して起動
# virsh define /etc/libvirt/qemu/vm.xml # virsh start vm # virsh console vm
ここで再定義できない、起動できない場合は、上記の定義ファイルで
- target dev=の値が被っている
- address ~ slot=の値が被ってる
辺りがアヤシイですかね。
LVMでPV(物理ボリュームを作成)
# pvcreate /dev/vdb
ボリュームグループ vg00 に追加
# vgextend vg00 /dev/vdb
論理ボリュームを拡張 (MBで指定)
# lvextend -l +100%FREE /dev/mapper/vg00-lv00
以下でもいいらしいんですができたことないのでなんとも。
# lvextend -L +150000M -n /dev/mapper/vg00-lv00
リサイズ
# resize2fs /dev/mapper/vg00-lv00
確認
# df -h
ここで増えてたらOKです。
CakePHPでマイグレーション
ふと今のプロジェクトでCakeでのマイグレーションがしたいなと思い立ったのでメモメモ。
CakePHPはここ数年でちょこちょこ使ってたんですが、わりと少人数or一人で開発してることが多くて、
あんまりマイグレーションとかをやろうと思ったことがなかったんですよね。
とりあえず調べてみると、
CakeDC Migration
https://github.com/CakeDC/Migrations
とやらを使うのが定番とのことなので早速使ってみる。
参考にしたのはこの辺↓
CakePHP2系でマイグレーションを利用する方法 | Ryuzee.com
CakePHPにMigrations Pluginを導入する | mawatari.jp
CakePHP Migrationプラグイン触ってみた - tokumei-log's diary
それではいってみましょー。
はいはいgithubからsubmoduleとしてcloneしてきて?Migration初期化して生成して・・・
Notice Error: Schema generation error: invalid column type enum('hoge','foo') for AdminAgencyOrder.type does not exist in DBO in [/var/www/oms_admin/lib/Cake/Model/CakeSchema.php, line 617]
・・・・
き、きっとNoticeだしなんかうまいことやってくれてるよね・・・!
・・・・
見事にそのカラムだけない(´・ω・`)
調べてみたらどうやらCakeのMySQLスキーマ定義にenumが存在してないようで。
CakeSchemaはENUMやInnoDBを扱えない - 趣味の延長線
さすがにここ直すのしんどそうなのでまた時間のある時にでも頑張ってみようかな。
しょんぼり。