某社に顧客管理システムとして SugarCRM を納入した時、自動採番(オートインクリメント) 機能が欲しいと言われていたので、その追加をした時のコードと、郵便番号から住所変換した時のコードと、住所からGoogleマップを呼び出す用に改良した時のコードをまとめて。
前提環境は SugarCRM 5.5 ja-Dev 版ですが、5.2 とか他のバージョンでも使えるかもしれません。あと、以前に書いたコードを思い出しながら書いてるので、うまく動かない可能性もあります。その場合はご連絡いただけると助かります。
photo credit: Mark Faulkner Photography
あけましておめでとうございます。今年は例年以上に正月気分にならなかった正月でしたが、皆様いかがお過ごしでしょうか。
……って、今ごろ新年の挨拶かよとか思われそうですが、このネタは1月2日に投稿予定だったものの、このブログを置いてた SaaSes Industria が絶不調だったため、サーバーが復旧するまで待とうと、色々試したり問い合わせを行っていた間中寝かしていたので、こんな有様となっております。結局 Industria はまともにならず今でもクソ重いので、さくらのVPS に出戻りました。
ということで、ネタの鮮度的にはアレな感じになりましたが、新年の休みを潰して BaserCMS のテーマファイルを作成してた際に作成・利用した Tips 的な内容を、備忘録として新年一発目のネタとさせていただきます。
たまたまネットを検索していたら、DNS設定をチェックして、採点してくれるサイトがあったのでご紹介。
操作は簡単で、ドメイン名を入れて Run Report! ボタンをクリックするだけ。しばらく待つと、DNSの採点をしてくれます。
参考までに、このブログの情報は以下の通り。
減点されているのは、
で、上から
って感じのエラー内容が書かれてました。
私の場合、DNSサーバーはドメインレジストラのものを利用して、自分では滅多に立てないので、こういうエラーが出ていても直しようがなかったりしますが、自分でネームサーバーを立てたりする方は設定の確認や参考になるかもしれませんね。(guilz.orgは、スタードメイン のDNSサーバーを利用しています)
ちなみに上記エラーですが、Nameservers on Separate Networks は、3つあるネームサーバーのうち、2つが同じアドレス帯にあるだけですので、実際は問題じゃなかったりします。SOA Number Format も書き方の作法的な部分なので、ちゃんとカウントアップされれば問題ない、重箱の隅的なエラーです。
あと2つはGoogle Appsの問題なので、Googleさんの対応に期待ですね。基本最近のDNSサーバーだと、どこもA+くらいのスコアにはなるんじゃないでしょうか。
余談ですが、RedHatはさすがの満点でしたw マイクロソフトも見習いましょうww
WordPress 3.1.3 日本語版が出たので自動アップデートを試みたものの、Apache環境のWordPressは問題ないのだが、nginxで動かしているこのサイトだけ何故か失敗。
ログを見てみると、
upstream timed out (110: Connection timed out)
ということだったので、本家のwikiを調べたところ、fastcgi_read_timeout が関係しているらしいと判明。デフォルトは60秒だから、それを180秒にしてやったところ、無事に自動アップデートが完了した。
あわせて、関係ないとは思うけど send_timeout の値もデフォルトが60秒なので、180秒にした。
書き方はこんな感じ。
server {
fastcgi_read_timeout 180;
…
…
}
fastcgi_read_timeout はHttpCoreモジュールの設定ではないので、server 以下に書いた。この辺りよく分かっていないので http 以下でもいいのかもしれないけど、wikiでの書き方もそうなってたので、まあそのままで。
send_timeout は http 以下に書いた。
http {
send_timeout 180;
…
…
}
もし同じ症状の方がいたら、参考までに。
順番が逆になったけど、SaaSes Industria Smallの初期状態とかいろいろ。
申し込んでから利用できるまでには、10分程度の時間しかかからなかった。さくらのVPS よりも早かったかな。急いでいる時にはありがたいかも。
デフォルトでは必要最低限のサービスしか立ち上がっていないため、特に各種設定ファイルを編集しなくても問題なさげ。初期ブート時で400MB程度メモリの空きがある。
初期状態では22番ポートしか開いていないので、セキュリティ面でもまだ安全なほうか。現時点ではCentOS x64のみ選択できる。yum check-update したところ、全てのパッケージが最新で、更新が必要な物はなかった。これには好感。
あとは さくらのVPS でもやったように、sshdのポート番号を変えたり、iptablesの設定を変えたりといった感じ。
あとは今回、nginx を利用したWebサーバーにする予定なので、その辺りの設定などをまた別記事にでもまとめます。
個人向けの提供を待ちきれず、知人がやっている会社でIndustriaを申し込んでもらい、試してみた。
早速使用してみたところ、もともとのXenを動かしているサーバーの時計が狂っているのか、18時間ぐらい前の時刻になっている。
Xenはホストとの間で自動時刻調整されるため、普通に時刻合わせをしてもダメなので、以下のようにした。
/etc/sysctl.conf に以下の行を追加して再起動する。
xen.independent_wallclock = 1
その場で変更したい場合は、rootになって以下のコマンドを打ってやる。
echo 1 > /proc/sys/xen/independent_wallclock
そのあとで
/usr/sbin/ntpdate ntp1.jst.mfeed.ad.jp
とすれば、正しい時刻が反映された。
ただ、再起動するとホストOS側の時刻に再設定されてしまうので、/etc/rc.d/rc.local あたりに、
/usr/sbin/ntpdate ntp1.jst.mfeed.ad.jp
と追加で書いた。これで再起動しても、常に時刻は正しく設定されるようになった。
余談だが、Industriaのデフォルトではntpが入っていないので、
yum install ntp
として、事前にインストールする必要がある。XenのホストOSと時刻が同期するから不要という事かもしれないが(さくらのVPS にはデフォルトで入っている)、ホストOSの時計が狂っていたのでは意味がないので、ホストOS側の時刻は正確に保っていただければと思う。
数年前にも一度これで悩んで、最近再び同じ事で悩むハメになったので、今度こそ忘れないように記録しておく。
ぴろり様が作成された、以下のスクリプトを改造して自分のサーバーのデータ領域とMySQLの両方をバックアップさせるようにしたのだが、このスクリプトはさくらインターネット用に作成されたものであるため、FreeBSDベースのものだった。
MySQLのデータベースをダンプして圧縮して90日間分保存するスクリプト
http://www.magicvox.net/archive/2009/02172054/
そのため、私が使っているさくらのVPS(CentOS) では date -v というオプションが存在せず、バックアップは正常に取れるものの、自動削除がうまくいかない。これをLinuxで利用できるように修正したときのメモ。
date -v -"30"d
というコマンドは、30日前の日付を求めるコマンドとなるが、これはLinuxだと
date --date="30 day ago"
と置き換えられる。
上記スクリプトでは、
RMFILE=mysql.`date -v -"$KEEPDAY"d +'%y%m%d'`.gz
という行を、
RMFILE=mysql.`date --date="$KEEPDAY day ago" +'%y%m%d'`.gz
とすることで、エラーもなく正常動作するようになった。
ドメインキング から、XOOPS Cube Legacy で作成していたサイトを さくらのVPS に移したのだが、モジュールインストール時に以下のようなエラーが出てインストールできなくなってしまった。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘TYPE=MyISAM’ at line XXX
どうやらMySQL 5.5系では ‘TYPE=MyISAM’ 指定が無効になっており、’ENGINE=MyISAM’ とSQL文を書いてやらないとダメな模様。このサーバーではremiレポジトリからPHP 5.3系・MySQL 5.5系がインストールされているため、既にインストールされていたモジュールは問題なかったものの、モジュールの新規インストールで問題が出たようだ。
その後、いくつかのモジュールのSQLを確認したが、確認した限りのモジュール全てで ‘TYPE=MyISAM’ が使われていたため、全部置換するのも面倒だなーと思っていたら、XOOPS Cubeの公式フォーラムに投稿されていた以下のハックで解決。
class/database/sqlutility.php
の
function splitMySqlFile(&$ret, $sql)
{
直下に、以下の行を挿入。
$sql = str_replace( 'TYPE=MyISAM', 'ENGINE=MyISAM', $sql );
これでモジュールのインストールができるようになった。