とっしぃのTech Memo

PHPとかサーバとか他色々言語のメモ的な。あとはたまにガジェットとか。

gitのコマンドラインから過去ファイルの内容を見る

大体こういうのってGUI(SourceTreeとか)でやっちゃってて、
過去のファイルがホントに欲しい時はcheckoutしちゃってたんで、
ファイルを見るだけってのをコマンドラインからやったことなかったのでメモ。

 git show {リビジョン}:{ファイルパス}

でいいみたい。

簡単でよろしい(・ω<)

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使ってるんですが、
なんかその間みたいな言語を覚えたいなーという気持ちがずっとありました。

候補としては、まぁ予想は付くと思いますがRubyPythonですわね。

それぞれのユーザー様からしたらとても失礼かもしれないんですが、
Perlはなんか今から覚えるようなもんでもなさそうだし、
CとかC++まで行くとさすがにそこまでじゃないしーって感じなんですよね。
JavaJVM起動とか入るんでちょいと除外。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ってのがあるらしいんですが
今日のところは時間的にいっぱいいっぱいなのでまた後日。

もうちょい早くにやり始めれば良かった(´・ω・`)


参考サイト:
CentOS6.4に複数バージョンのPythonのインストール | WinRoad徒然草

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を扱えない - 趣味の延長線


さすがにここ直すのしんどそうなのでまた時間のある時にでも頑張ってみようかな。


しょんぼり。