fuelphpのdb.php設定する際、pdoとmysqliだと書き方が変わる
fuelphpのdb.php設定する際、pdoとmysqliだと書き方が変わる
大事なことなので、二回言いました。
pdoからmysqliにドライバ変更しようとして、ハマった。
最初は単純に
'type' => 'pdo',
を↓に書き換えていた。
'type' => 'mysqli',
これだと、
No MySQLi Connection
の例外が発生し怒られる。
しかし、原因がさっぱりわからない。
そもそもエラーメッセージが不親切なので、原因がわかるように
\fuel\core\classes\database\mysqliをハックする
135行目あたりの例外処理を下記のようにする。
throw new \Database_Exception('No MySQLi Connection<br>\n'
. $e->getMessage() . "<br>\n"
. "hostname:" . $hostname . "<br>\n"
. "username:" . $username . "<br>\n"
. "password:" . $password . "<br>\n"
. "database:" . $database . "<br>\n"
. "port:" . $port . "<br>\n"
, 0);
これでようやく、設定の書き方が間違ってることに気が付いた。
ちなみにパスワードまで表示してるので、
本番公開の際は、例外を非表示にすることを前提にしている。
追記:
本番環境(FUEL_ENVがproductionの場合)は表示されない。ちゃんとFUEL_ENVを設定しましょう。
http://mkkn.hatenablog.jp/entry/2013/12/04/120701
↓ちゃんと公式ドキュメントに2通りの書き方書いてあるね。
http://fuelphp.jp/docs/1.7/classes/database/introduction.html
抜き出すとこんな感じ
pdo
'dsn' => 'pgsql:host=localhost;dbname=fuel_db',
mysqli
'hostname' => 'localhost',
'port' => '3306',
'database' => 'fuel_db',
やよいの青色申告で源泉徴収税を入力する
フリーランスで仕事をしていて、
振込みは源泉徴収分が引かれていて、決算内容に源泉徴収分が残ってしまう場合。
源泉徴収分の入力は振替伝票で入力するそうです。
http://tax.f-blog.org/yayoi/Withholding-taxes-Input.html
↑を参考にしつつ、
売掛帳の対象の銀行振込の行から振替伝票を作成し、
源泉徴収を入れたら残っていた分が消えました。
※追記
↑のサイトでは勘定項目を事業主貸にしてますが、厳密には仮払い金になるそうです。
今日税務署の無料指導にいったら下記の正しいほうを教えてくれました。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1437777789
ただ、本来は国に対して先に仮払いしているということなので、
事業主貸ではなく「仮払金」につけるのが正しいのだそうです
「仮払金」にそのままつけても良いし、
「仮払源泉徴収税」という補助科目を作れば良いでしょうか
還付されたら清算します
決算書に補助項目のみの欄を表示できなかったので
勘定項目で追加しました。
以下、やよいでのやり方
[他流動資産]の下に「仮払源泉税」を作ります。
振り替え伝票で仮払源泉税を入力
さらに決算書の出力の際、資産の部の空き項目をダブルクリックし、
決算項目所名「仮払源泉税」割り当て勘定科目を「仮払源泉税」にしました。
このままだと次年度に資産の仮払い額がそのまま残りますので
所得税納付もしくは還付のタイミングで
事業主貸/仮払源泉税で清算します。
※間違ってる部分あればコメントで指摘してください。
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':
mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':
awsでEC2上からRDSへmysqldumpを実行しようとしたら、エラーが出て怒られた。原因はクライアントとサーババージョンの相違らしい↓参照
http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/
(メイドさんに注目)
yumで最新版を入れる方法
http://qiita.com/kmats@github/items/48457b7e5046f3cdf4d8
まずは今入ってる古いものを削除
インストールはansibleを使ってるので、↓な感じにplaybook編集
- hosts: hoge-server
user: root
tasks:
- name: install repo
yum: name=http://repo.mysql.com/mysql-community-release-el6-4.noarch.rpm state=installed
- name: install mysql
yum: name=mysql state=installed
- name: install mysql-server
yum: name=mysql-server state=installed
- name: install mysql-devel
yum: name=mysql-devel state=installed
- name: be sure mysql is running and enabled
service: name=mysqld state=running enabled=yes
しかしっっっっ、mysqld起動でエラー
rootで起動してたのがお気に召さないらしい
あと↓も
http://blog.goo.ne.jp/puri69/e/c6192fa05b1a04239e380a912381833e
'--skip-locking'は将来のリリースで無くなるから
'--skip-external-locking'を使ってくれといってるらしい
my.cnfを変更
[mysqld]
user = mysql
skip-external-locking
晴れて5.6のインストール終了
mysql --version
mysql Ver 14.14 Distrib 5.6.14, for Linux (x86_64) using EditLine wrapper
mysqldumpも通るようになった。
fuelPHPでMySQLのREPLICATION (Master-Slave)を使う
fuelPHPでMySQLのREPLICATIONを使う
fuelPHPで
MySQLのレプリケーション(REPLICATION )構成にアクセスする方法
ちなみに実際にはAWSのリードレプリカ(MySQL Read Replicas)を使ってます。
http://php6.tumblr.com/post/38309122629/fuelphp-advent-calendar-2012
http://fuelphp.com/forums/discussion/7061
http://d.hatena.ne.jp/Kenji_s/20130606/fuelphp_env_config
↑参考にしたページ
db.phpの親子関係をちゃんと理解してなかった為にすごいハマった。
だって、公式ドキュメントに書いてないし・・・
まずはDB全環境共通設定を編集する
DB全環境共通設定
config/db.php
return array(
'default' => array(
'type' => 'mysqli',
'connection' => array(
'hostname' => 'ここは上書きされるのでなんでもよし',
'port' => '3306',
'database' => 'ここは上書きされるのでなんでもよし',
'username' => 'ここは上書きされるのでなんでもよし',
'password' => 'ここは上書きされるのでなんでもよし',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => array('hoge-slave1'),
),
'hoge-slave1' => array(
'type' => 'mysqli',
'connection' => array(
'hostname' => 'ここは上書きされるのでなんでもよし',
'port' => '3306',
'database' => 'ここは上書きされるのでなんでもよし',
'username' => 'ここは上書きされるのでなんでもよし',
'password' => '',
'persistent' => false,
'compress' => false,
),
'identifier' => '`',
'table_prefix' => '',
'charset' => 'utf8',
'enable_cache' => true,
'profiling' => false,
'readonly' => false,
),
);
次に環境ごとの設定ファイルを用意します。
※環境について
development:開発環境
test:テスト環境
staging:ステージング環境
production:本番環境
config/development/db.php
return array(
'default' => array(
'connection' => array(
'hostname' => 'hoge.hoge',
'port' => '3306',
'database' => 'hogedb',
'username' => 'hoge-san',
'password' => 'hogehoge',
),
),
'hoge-slave1' => array(
'connection' => array(
'hostname' => 'hoge.hoge',
'port' => '3306',
'database' => 'hogeslavedb',
'username' => 'hoge-san',
'password' => 'hogehoge',
),
),
);
slaveに対してSQLを発行する
model側
$result = DB::query('SELECT * FROM `users`')->execute('hoge-slave1');
まとめ
共通設定はconfig/db.phpに書く
環境ごとの値はconfig/development/db.phpなどに書く
設定項目のキーが一緒の部分だけ上書きされる。
fuelPHPの公式ドキュメントは役に立たない。
※pdoとmysqliの書き方が混在してたので、mysqliに統一
MyDNSを設定しようとした話
MyDNSを設定しようとした話
AWS環境の場合、インスタンス変更などでIPが変わってしまう為、hostsによる開発サーバのIP管理が非常に面倒くさい。
その為、簡単に作れるDNSサーバを探してみてMyDNSというのを見つけた。
MyDNS.jpという同名サービスもあるがこれは別もの。
インストールしてみたが、管理画面がうまく動作しない。
エラーログには下記が記録されていた
Error creating new SOA record: Column count doesn't match value count at row 1
原因はmydns.conf内のrecursiveを設定した場合にadmin.php内の2629行目あたり。
insert文でエラーになる。
$active = ($soa_use_active ? ",active" : "");
$recursive = ($soa_use_recursive ? ",recursive" : "");
$query = "INSERT INTO $soa_table_name" .
" (origin,ns,mbox,serial,refresh,retry,expire,minimum,ttl$active) VALUES (";
$recursiveこれにカラム名を入れてるってぽいが、下のSQL文で使われていない・・・
そもそもrecursive のテストすらしてないのでは?という疑念が出てきたので、
MyDNS使うのをやめた。
追記:素直にEIP振るのがよさそう。たいした額じゃないし・・・