野鳥日記

野鳥と技術のブログ http://www.kiriya-system.com/

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',

 

apache stop;start;とrestartは違うの巻

apache stop;start;とrestartは違うの巻

 

phpの再構築で

すごいハマった。

 

http://blog.nomadscafe.jp/2013/02/apachectl--k-restart-stop-start.html

 

apache restartしても親プロセスは実際には落ちてないのね・・・

PHPの再構築が反映されてないわけだよ・・・

apacheのstop;startしたらphp_infoの中身も変更がちゃんと反映された。

 

やよいの青色申告で源泉徴収税を入力する

やよいの青色申告源泉徴収税を入力する

 

フリーランスで仕事をしていて、

売掛金で売上を入力し、売掛金振込を入力した場合に

振込みは源泉徴収分が引かれていて、決算内容に源泉徴収分が残ってしまう場合。

 

源泉徴収分の入力は振替伝票で入力するそうです。

 

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

 

まずは今入ってる古いものを削除

yum remove -y mysql

 

インストールは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)を使う

fuelPHPMySQLREPLICATIONを使う

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振るのがよさそう。たいした額じゃないし・・・