Laravel
前にメモしたリンク集。
floatingdays: 初めてのLaravel参考サイト
floatingdays: Laravelと Vue.jsのチュートリアル参考サイト
MySQL5.6以前だと出るエラーの対処方法。
他にもやり方はあるみたいだけど、ここのが公式?
Laravel 5.4: Specified key was too long error - Laravel News
テストを書くチュートリアル。
Laravel5.3以前の記事のようで、Laravel5.4からはページ遷移やページ内のテストは別途インストールが必要なLaravel Duskの管轄に変わったので、その部分は読み替えが必要。
Laravelでテストコードを書くためのチュートリアル - Qiita
Github
Githubを二要素認証にして、かつ、Githubへのpushをsshではなくhttpsでする方法。
ユーザー名とトークンの入力省略も。
https+アクセストークンを使ってGitHubのアカウントを使い分ける - Qiita
同じく入力省略について、こちらは.netrcに書く方法。
[Git][GitHub]GitHubにPushする際に認証失敗する | DevAchieve
Circle CI
DBまわりの設定。
seedはtest内でやるなら設定ファイルには要らないかも。
CircleCiでLaravelのMySQLを使ったテストを実行する - Qiita
APP_KEYをcircle.ymlに定義しないとエラーになるので書いておく。
エラーメッセージが分かりづらい → "RuntimeException: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths."
Laravel アプリケーションを、 Circle CI 経由で AWS ElasticBeanstalk に自動デプロイ - Qiita
Circle CIで使えるPHPのバージョンの参考ページのリンクなど。
PHPプロジェクトにおけるCircle CIの設定 - Qiita
Circle CIからプロジェクトを削除せずにGithubからプロジェクトを削除すると、Circle CI側で削除できなくなる(ずっと読み込み中になる)。
対策は、Githubに同名のプロジェクトを作ればCircle CIから削除できるようになる。
相羽 大輔 (Daisuke AIBA)さんのツイート: "さっきの件、解決。CircleCIに登録したプロジェクトを削除するには「Project Settings > Stop Building on CircleCI」GitHub側で先に消すとCircleCIのプロジェクト設定が触れなくなるので注意。 #kzrb"
2017年6月8日木曜日
Laravelを Github + Circle CIで CIするまでの参考サイトまとめ
2016年7月16日土曜日
Amazon RDS Auroraの参考サイトメモ
参考記事
Amazon Aurora/MariaDB/MySQLの違いを整理してみる #reinvent | Developers.IO
エンタープライズワークロードにおけるAmazon Auroraの活用
Amazon Auroraについての簡単なメモ - Qiita
11/10 Amazon RDS for Aurora 東京ローンチ記念セミナーに行ってきました - 駆け出しアクアテラリストのIT奮闘記
ちょっと待って!Auroraを使う時にMulti-AZが本当に必要ですか? | Developers.IO
問題点
Amazon Auroraへの移行 - inFablic
AWS RDSのAuroraをパブリックから繋いだ時のパフォーマンス - イフブロ
メンテナンスウィンドウ
Amazon RDS のメンテナンス期間 - Amazon Relational Database Service
可用性
Amazon Web Services ブログ: 【AWS発表】Amazon Auroraをご利用頂けるようになりました!
Amazon Aurora東京ローンチ記念セミナー参加レポート - 其未来
Auroraの可用性は99.99% → 1年間で52.56分止まる計算になる
SLAは99.95%
料金
料金 - Amazon RDS | AWS
2016年現在、オンデマンドインスタンスで、$0.35/H~(最安のr3.large)→ ストレージやI/Oも含めて3万円弱/月~くらいか
Multi-AZにするなら倍だから6万円弱/月か
2016年1月9日土曜日
EC2の MySQLを S3にバックアップする方法(世代管理付き)
S3への送信はaws-cliが良さそう。
参考:aws-cli - AWS CLIでS3を操作する - Qiita
aws-cliはAmazon Linuxなら最初から入っているが、手元のインスタンスはconfigure等をするにはバージョンアップが必要だった。
yumでもバージョンアップできるが、今回は諸事情により依存関係のある諸々をそっとしておきたかったので、下記を参考にyumを使わずにaws-cliをバージョンアップ。
参考:AWSCLIで運用検討中の人必見! AWSCLIを使用したS3へのファイルコピー | クラウド工房 Powered by Amazon Web Services
sudo easy_install pip
sudo pip install awscli -U
IAMでS3のみに権限を絞り込んだユーザーを作り、その認証情報をconfigure。(もう少し権限を絞っても良いかも。)
aws configure↓
AWS Access Key ID [None]: (アクセスキーを入力)
AWS Secret Access Key [None]: (シークレットアクセスキーを入力)
Default region name [None]:
Default output format [None]:
世代管理はS3の機能であるバージョニングとライフサイクルを使う。
S3でバケットを作成し、バージョニングを有効化。
ライフサイクルでルールを追加。(例「以前のバージョン」を30日後に削除)
後は適当にダンプとS3へのコピーのスクリプトを作ってcronに登録する。
分かりやすいようにディレクトリを作成し、そこにスクリプトを作った。
バックアップ用スクリプト作成。
vi backup.sh↓
#!/bin/sh(パスワード直書きにしたが、きちんとやるならMySQLのパスワードは隠したい。)
echo "START " `date +'%Y/%m/%d %H:%M:%S'`
MYSQL_PWD='MySQLのパスワード' mysqldump -u MySQLのユーザー 対象DB > data.dump
aws s3 cp data.dump s3://バケット名/
echo "E N D " `date +'%Y/%m/%d %H:%M:%S'
スクリプトのファイルに実行権限を付ける。
chmod 700 backup.sh
cronに登録。
crontab -e↓
0 1 * * * cd /スクリプトのディレクトリ; ./backup.sh >> history.log
aws-cliを使うと、AWSのサービス間の通信はSSL(TLS?)で暗号化されるようだ。
参考
aws — AWS CLI 1.9.17 Command Reference
By default, the AWS CLI uses SSL when communicating with AWS services.
Amazon Web Service aws cliはデフォルトで暗号化通信されるのか? - なぜか数学者にはワイン好きが多い
S3を使わずにサーバ上で世代管理するだけなら、下記が一番分かりやすかった。
mysqldumpをcronで1日1回取得し、バックアップ用ファイルを保存する - サイト制作の豆知識
2013年11月9日土曜日
MySQLで 「ERROR 2006 (HY000) at line xxx MySQL server has gone away」
調べたことをメモしておく。
mysqldumpでエクスポートした1GB余りのデータをインポートする時に、下記エラーが発生。
ERROR 2006 (HY000) at line 351 MySQL server has gone away
対策
↓
インポート時に「MySQL server has gone away」が発生したときの対処 | 南紀熊野ウェブサービス(大阪、新宮市)
max_allowed_packet = 32M
↓
今度は下記エラーが発生。
ERROR 2013 (HY000) at line xxx: Lost connection to MySQL server during query
対策
↓
Importing 1GO SQL File => ERROR 2013 (HY000) at line 23: Lost connection to MySQL server during query - Stack Overflow
max_allowed_packet = 1100M
net_write_timeout = 300
↓
駄目。次。
ERROR 2013 (HY000): Lost connection to MySQL server during query - MySQL
innodb_force_recovery = 4
↓
下記エラー。
ERROR 1051 (42S02) at line xx: Unknown table 'xxxxx.xxxxx'
↓
これは?
ERROR 2013 (HY000): Lost connection to MySQL server during query - Dev Shed
innodb_force_recovery = 3
↓
同じエラー。innodb_force_recoveryはやめる。
↓
MySQL Lists: mysql: Re: ERROR 2013 (HY000): Lost connection to MySQL server during query
connect_timeout = 6000
単位は秒?
↓
駄目。
↓
【結論】原因は、メモリ不足だった。
2013年7月5日金曜日
MySQL 5.6を RPMからインストール
- wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.12-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ -O MySQL-client-5.6.12-1.el6.x86_64.rpm
- wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.12-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ -O MySQL-server-5.6.12-1.el6.x86_64.rpm
- wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.12-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ -O MySQL-devel-5.6.12-1.el6.x86_64.rpm
- wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.12-1.el6.x86_64.rpm/from/http://cdn.mysql.com/ -O MySQL-shared-5.6.12-1.el6.x86_64.rpm
- yum install MySQL-*.rpm
2011年11月14日月曜日
PDOでテーブルの列名を全て取得する方法
テーブルの列名を取得するには、MySQLならDESCRIBEで簡単にできるが、PostgreSQLだとpg_attributeカタログから取得しないといけないらしい。
でもPDOを使えばMySQLでもPostgreSQLでも取得できた。
$pdo = new PDO("$driver:dbname=$db", $user, $password);
$pdoStatement = $pdo->query("SELECT * FROM $table_name LIMIT 0");
$columns = array();
for ($i = 0; $i < $pdoStatement->columnCount(); $i++) {
$meta = $pdoStatement->getColumnMeta($i);
$columns[] = $meta['name'];
}
var_dump($columns);
もしテーブルに1行以上データがあることが保証されているなら普通に1行SELECTして連想配列の列名見れば済む話だが、データなしでも動くようにしたらこうなった。
ただし、PDOStatement->getColumnMeta()のマニュアルを見ると、
この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。
PDO ドライバの全てが PDOStatement::getColumnMeta(). をサポートしているわけではありません。と書いてあり、PHPやDBのバージョンによっては上手く動かないかもしれないが、とりあえず手元の環境では動いた。
これでPHPでO/R Mapperを作りたい人も安心だ。
2011年11月2日水曜日
Seasar2入門の参考サイトとプロダクト選択のメモ
まずは概要を把握。
- Seasar2 入門
- Seasar2によるDI、AOP、その他についての分かりやすいシンプルな解説
- Java初心者が超俊敏にWebアプリを作る方法
- Seasar2のEclipseプラグインであるDoltengとSAStruts、S2JDBCについての解説
- Seasar2 - Seasar2
- 本家
- 初心者には見辛い
- MVCは、S2Struts or SAStruts or Teedaのどれがいい?
- S2StrutsかSAStrutsだとどっち?
- SAStrutsかS2Strutsか - ひがやすを blog
既にS2Strutsで開発している案件の追加開発ならS2Struts。
JDK1.4をつかうならS2Struts。
それ以外は、SAStruts。 - SAStrutsとTeedaでは?
- Teeda
- TeedaはJSFの実装
- Teeda Extensionを使えばHTMLをテンプレートにできる
- 「Seasarの問題点など」にそろそろ一言いっておくか - ひがやすを blog
ただ、無責任に何でも自由というのは良くないので、SAStrutsとS2JDBCの組み合わせが、もっとも無難だというメッセージを出しているわけです。
- SAStrutsとS2JDBCを作ったわけ - ひがやすを blog
TeedaとS2Daoは、基本的に規約ベースのフレームワークです。規約を知っていれば、本当にさくさく開発できます。でも、規約ベースなので、規約を知らないと、何にもできなくなっちゃう。この辺が、大規模開発には向かないところ。
SAStrutsとS2JDBCは、大規模案件にも耐えられるように最初から設計されています。
- 感想:チームでの開発や今後のメンテを考えると、参考情報も経験者も多いStrutsの名前を冠するSAStrutsに比べてTeedaは学習コストがかかりそう
- 結論:SAStrutsが無難
- S2JDBC or S2Daoのどっちを使う?
- HibernateとS2DaoとS2JDBCの考え方 - ひがやすを blogより引用
- S2Daoについて
S2DaoはSQLを中心に考えます。とはいえ、すべてのSQLを開発者が書くのは効率が悪いので、挿入、更新、削除は、S2DaoがSQLを自動生成しますが、検索は、開発者にSQLを書いてもらいます。
デメリットは、SQLを書くのが面倒なことです。また、検索の結果セットごとにDTOを作らなければいけないので、DTOが増える傾向があります。
Webのフレームワークとの組みあわせでいくと、Teeda Extensionは、S2Dao(DTO)と相性が良いように設計されているので、Teedaを使う場合は、S2Daoが良いと思います。
- S2JDBCについて
S2JDBCは、エンティティ(Java)とテーブル(データベース)は、同一のモデルだとみなしています。また、複雑なSQL以外は、すべて自動生成します。
デメリットは、エンティティの設計が、テーブルに引きずられ、完全にドメインをあらわしたものにならないこと。
- 感想
- S2DaoはINSERT/UPDATE/DELETEのSQL自動生成と、手作りしたSQLの実行をしてくれるみたい
- S2JDBCはDAOではなくApache CommonsのDbUtilsのようなSQLビルダー?
- 結論:TeedaでないならS2JDBCで
久しぶりにJavaの世界に帰ってきたら、昔使ってたStruts1.3(1.x系は1.3で止まってるとは意外)のラッパーであるSAStrutsと、同じく昔使ってたJakarta Commons(現在は昇格してApache Commons)のDbUtilsに似たS2JDBCが最前線だなんて、奇遇と言うか、あるいは必然なのかな。
2011年10月3日月曜日
MySQLの dumpと restore
文字コード設定がされていないサーバからダンプする時に文字化けすることの対策のメモ。
dump
mysqldump -u user_name -p --compact --default-character-set=binary db_name > dump.sql
restore
DB(Schema)を作ってから、
sed 's/latin1/utf8/g' dump.sql > dump_utf8.sql
mysql -u user_name -p db_name < dump_utf8.sql
バイナリで出して文字コードの記述を置換してから取り込む。
参考
- ヒビノアワ: UTF-8のデータベースをmysqldumpすると文字化けする件
- mysqldump で文字化け (マルッと!)
- 「mysqldump」を使った「MySQL」のバックアップとリストア – FlatLabs
2010年10月26日火曜日
ファイル1つだけで出来ている 便利なPHP製ツールいろいろ
PHPライブラリは新時代に入った。定番だったphpMyAdminやPEAR::Mailはもう古い。最近は1ファイル配置するだけで簡単に使える便利なツールが増えてきた。
例えばこんなの。
- DB管理: Adminer
- phpMyAdminの代替として。
- バージョン3からは、PostgreSQL等も扱えるようになり日本語訳もされたが、(少なくともしばらくは)MySQL用に英語メニューで使うのが無難?
- 参考: floatingdays: Webブラウザで DBを参照・更新・管理できるツールいろいろ
- テンプレートエンジン: Twango
- SmartyやTwigの代替として。
- 1ファイルというか1関数。
- Django派に優しい。
- RSSフィード生成: FeedCreator
- これは定番。DokuWikiでも内部的に使われている。
- 参考
- Mail送信: Qdmail
- mb_send_mail()やPEAR::Mailの代替として。
- HTTP通信: Snoopy
- PEAR::HTTP_RequestやHTTP_Clientの代替として。
- htmlSQLも合わせて使うと便利。(参考: floatingdays: htmlSQLの基本的な使い方)
- 名前とかAAとか大丈夫なのかな。
次は1ファイルのフレームワークだね。(Google Code上にはもうたくさん公開されてるけど...)
あるいは1ファイルのブログシステムやWikiか?
2010年8月15日日曜日
CentOS5.5に PostgreSQL8.4をインスール&セットアップする手順
手順のメモ。
古いpostgresがインストールされていたので削除。
yum remove postgresql*釣られてhttpd(Apache)もアンインストールされたが今回は構わない。
yumでpostgresをインストール。(CentOS5.5からは標準のyumリポジトリにPostgreSQL8.4がある。今までのpostgresと区別するために名前に"84"が付いている。)
yum install postgresql84-server以下がインストールされる。
- postgresql84-libs
- postgresql84
- postgresql84-server
必要に応じてdevelもインストール。
yum install postgresql84-devel
合わせてLinuxユーザーとして"postgres"が登録されるので、ユーザーを切り替える。
su postgres
初期化。
initdb --encoding=UTF-8 -D /var/lib/pgsql/data/--encoding=UTF-8は無いとまずい?
--no-localeは要るのかな?
rootに戻り起動。
/etc/init.d/postgresql start
OS起動時にpostgresが起動するようにしておく。
chkconfig postgresql on
2010年5月28日金曜日
SQLの集計関数で NULLを含む列を集計する場合の注意点
MySQLとPostgreSQLの話。他のRDBMSは試してない。
SQLでNULLを含む列を集計する場合、NULLの行は無視される。
SELECT(PostgreSQL 8.4とMySQL 5.1で確認。)
SUM(t.v) -- => 15
, MIN(t.v) -- => 0
, MAX(t.v) -- => 10
, COUNT(t.v) -- => 3 (NULLの行も入れれば4行)
, AVG(t.v) -- => 5.0000 (NULLの行をゼロと考えれば3.75)
FROM (
SELECT NULL v
UNION
SELECT 0 v
UNION
SELECT 5 v
UNION
SELECT 10 v
) t
SUM()やMIN()、MAX()では問題ないが、COUNT()やAVG()ではNULLの行の分も含めて計算したい場合に困る。
そういう場合、COALESCE()でNULLをゼロに変換するとよい。
SELECT
COUNT(COALESCE(t.v, 0)) -- => 4
, AVG(COALESCE(t.v, 0)) -- => 3.7500
FROM (
SELECT NULL v
UNION
SELECT 0 v
UNION
SELECT 5 v
UNION
SELECT 10 v
) t
MySQLの場合はIFNULL()でもOK。
参考
PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Conditional Expressions
MySQL :: MySQL 5.5 Reference Manual :: 11.2.3 Comparison Functions and Operators
2010年4月5日月曜日
PostgreSQLで(ほぼ)リアルタイムにバックアップを取る方法
いろいろあるみたい
外部ツール
- pgpool II
- postgresの代わりにクエリを受け付け、それを2つのpostgresに送信する
- 手軽に使えるらしい
- 乱数値やタイムスタンプ等、それぞれのpostgresが生成する値は一致しないことがある
- Slony I
- 非同期レプリケーション
- 設定等が面倒らしい
- [Think IT] 第4回:非同期レプリケーション! (1/3)
- Slony-Iによるレプリケーションとオンラインリカバリ
- PGCluster
本体の機能
- Warm Standby
- Postgres 8.2から使える
- 非同期
- 高可用性のためのウォームスタンバイ (postgresql.jpのマニュアル)
- pg_standby (同上)
- pg_standbyを使ったログシッピングのやりかた - lolloo-htnの日記
- PostgreSQL冗長化ガイド(SCP経由でWarm Standbyの例あり)
- Hot Standby
- Postgres 9.0で実装されるらしい
tags: backup, db, postgres, replication 0 コメント
2010年3月20日土曜日
Webブラウザで DBを参照・更新・管理できるツールいろいろ
クラウドの時代ですから。
個人的にお薦めなのはAdminer。一般受けしそうなのはSQL Buddy。
MySQL用(上の方が使いやすい)
- Adminer
- PHP1ファイルのみ(無理に1ファイルにすることないと思うけど)。設置すれば設定不要ですぐ使える
- シンプルだが普段使う機能は一通り揃ってる。シンプルだからこそ使いやすい
- SQLをガリガリ書きたい人にお薦め
- データのclone(コピー)ができるのが何気に便利
- 見た目は少々無骨。CSSファイルをダウンロードすればSkinを変えられる
- 昔はphpMinAdminという名前だったが改名した
- 通常版より"English only"の方が少しファイルサイズが小さい。そんなに変わらないか
- ライセンスはApache License
- Adminer Editor
- Adminerの簡易版。データの参照・登録・更新・削除だけしかできない
- 別途Extensionsを用意しないと動かないようだ
- データをいじるだけならこれでいいかも。逆に、データをいじる以上のこと(テーブルの変更とか、DBのDROPとか)をさせたくないユーザー向けに渡すのにちょうどいい(それを意識して作ったんだと思う)
- SQL Buddy
- 見た目は一番きれい。スッキリしている。Ajaxでサクサク動く
- 日本語にも対応している
- パッケージ更新のお知らせ機能があるみたい
- 複数の列を一気に編集(更新)できる(スプレッドシート形式ではないが)
- データを登録する際にDatetime型の列に現在日時を自動でセットしてくれない(下記のAdminerやMySQL Quick Adminはやってくれる)
- ライセンスはMITライセンス
- 参考
- phpMyAdmin
- 定番だが、使いづらい。いろいろできるようにした結果、あまり使わない機能の中によく使う機能が埋もれてしまっている
- yumでもインストールできる
- ライセンスはGPL v2
- 参考:floatingdays: CentOSに phpMyAdminをインストール
- MySQL Quick Admin
- 見た目はわりと良い。Ajaxでサクサク動く
- 最初にconfig.phpを編集する必要があるみたい(ログイン機能がうまく動かなかったので)
- SELECTのSQLを自分で書けない?実用するには辛いかも
- 最後のUpdateは2007年6月。PHP5.3で動かすとDeprecatedが出る
- ライセンスは明記されていないが、フォーラムにこんなやり取りが書いてあった
- PHP Mini Admin for MySQL
- PHP1ファイルのみ
- Screenshotsを見る限りAdminerの方が良さそうなので、試していない
- 参 考:MySQLのウェブ管理ツール比較 - ♪8th Note♪
- Webadmin-mysql
- あまり使われていない?
PostgreSQL用
- phpPgAdmin
- 名前はphpMyAdminと似てるが、UIは洗練されていて使いやすそう
- ライセンスはGPL
- 参考:CentOSに phpPgAdminをインストール
これらのツールのようにPHPでつくっちゃえば、DB側がバージョンアップしてもphp-pdo/php-mysqlが対応してくれるので、ツール側での対応は特にいらないというのはクライアントアプリのツールには無い利点だと気付いた。
2009年8月12日水曜日
Rubyの ActiveRecordについてのメモ
しばらく離れていたらすっかり忘れてる。
調査したことのメモ。
微妙に仕様変わってる。
基礎:ActiveRecordを使ってみる « UK STUDIO
検索して見つからない場合の戻り値:ActiveRecord find時の戻り - 忘れやすいのでメモ - Yahoo!ブログ
(検索方法によってnilだったり空の配列だったり、例外が投げられたり)
find_first()とfind_all()は無くなった:同じくActiveRecord find時の戻り - 忘れやすいのでメモ - Yahoo!ブログ
最大値等のSQLでいう集約関数:RDBMSの集約関数の結果をActiveRecordで取得する方法 - 森薫の日記
ランダムに1件取り出す:
そんな悲しい目をしないで » Blog Archive » Rails ActiveRecord でランダムにレコードを取得する方法
Mysql で、ランダムにレコードを取り出す方法 - kaeruspoon
(RAND()を使う方法は行数と同じだけRNAD()を実行するわけだから、行数が多い場合はしんどそう)
find_by_xxx()とfind_all_by_xxxについて:ActiveRecordで検索-find_by_* - うなの日記
tags: active-record, db, rails, ruby 0 コメント
Railsの migration
メモ。
概要:Ruby on Rails : migration 機能でデータベーススキーマを変更する - WebOS Goodies
詳細:Ruby on Rails : migration 機能リファレンス - WebOS Goodies
データ型について等:FFTT : RailsのMigration
MySQLの数値型の:limitについて、上記参考サイトでは桁数を指定するように書いてあるが、手元のRails2.3.3ではバイト数を指定するようだ。
なのでbigintの場合は :limit => 8 にする。
参考:MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.2 数値タイプ
2009年1月26日月曜日
WWW SQL Designer 2.3.2 変更メモ
WWW SQL Designerのバージョンが2.3.2に上がっていたのでUPDATE。
そこで、自分でカスタマイズした点を反映するメモ。やりたい変更内容は以前のバージョンと同じ。
参考:
floatingdays: WWW SQL Designerのインストール&設定
floatingdays: WWW SQL Designerの Save ・ Loadをスマートに改良
変更箇所
(全角のスペースは普通のインデントに変換してから使うこと!)
- js/config.js
- 9行目の変更:デフォルトの保存方法をファイルに変更
DEFAULT_BACKEND:["php-mysql"],
↓
DEFAULT_BACKEND:["php-file"], - js/wwwsqldesigner.js
- 1201行目を変更:保存時のプロンプトにURLから保存名を取得して表示する
var name = prompt(_("serversaveprompt"),"");
↓
var name = prompt(_("serversaveprompt"), location.href.split("=")[1]); - 1212行目に追加:ロード時のURLの後ろにに保存名を付ける
if (!keyword) {
var name = prompt(_("serverloadprompt"),"");
if (name) {
location.href = "?keyword=" + encodeURIComponent(name);
}
return;
} - 1538~1539行目の変更:外部キーはどのフィールドでも作成可能にする
this.dom.foreigncreate.disabled = !(this.selected.isPrimary());
this.dom.foreignconnect.disabled = !(this.selected.isPrimary());
↓
this.dom.foreigncreate.disabled = false;
this.dom.foreignconnect.disabled = false;
tags: db, erd, install, javascript 0 コメント
v8cgiのインストールと簡単なサンプル
v8cgiはWWW SQL Designerを作ったondrej.zara氏が作ったサーバサイドJavaScript実行環境&ライブラリ。
CGI感覚で手軽にJavaScriptでWebプログラムが書ける。(さらに、テンプレート機能を使えばPHP感覚で書ける。)
ソースとWindows用のバイナリが配布されている。
メールライブラリや画像ライブラリ(GD)、テンプレートライブラリなどが付属している。
Windowsへのインストール
(参考:Installation - v8cgi - How to install v8cgi - Google Code)
- v8cgi - Google CodeからZIPをダウンロード。展開して適当なフォルダに置く。(例:C:\test\v8cgi)
- v8cgi.confをCドライブの直下(コンパイル時に指定された場所)に移動する。
- v8cgi.confの中身を編集。(パスを環境に合わせる。)
(例)// put default .js and .dll files here
Config["libraryPath"] = "c:/test/v8cgi/lib"; - コマンドプロンプトからv8cgi.exeを実行してみる。エラーが無ければOK。
C:\test\v8cgi>v8cgi.exe
Nothing to do. - Apacheの設定ファイルhttpd.confにCGI実行の設定を追加。
(例)<Location /v8cgi>
※mod_cgiが有効になっていなかったら有効にしておく。
Options +ExecCGI
AddHandler cgi-script .ssjs
</Location>LoadModule cgi_module modules/mod_cgi.so
- Apacheを再起動。
- Webのディレクトリにテスト用のScriptを作る。(例:htdosc\v8cgi\exaple.ssjs)
(例 1)#!/test/v8cgi/v8cgi.exe
※responseオブジェクトはデフォルトでインスタンスが生成されている。(参考:API_HTTP - v8cgi - Library "http.js" - Google Code)
response.write("Hello v8cgi!");
(例 2)#!/test/v8cgi/v8cgi.exe
※response.writeを使わない場合、Content-typeを出力しないと500 Internal Server Error(Premature end of script headers: example.ssjs)になる。
System.stdout("Content-type: text/plain\n\n");
System.stdout("Hello v8cgi!"); - 上記のファイルにアクセスしてみる。エラーが無ければOK。
DBを使う例
#!/test/v8cgi/v8cgi
library("mysql.dll");
library("query.js");
Query.setDB(new MySQL().connect("localhost", "db_user", "db_password", "schema"));
var result = new Query(Query.SELECT)
.field("id").field("name") //SELECT
.table("members") //FROM
.where("%f = %s", "name", "TARO") //WHERE
.execute();
response.write(result.numRows() + "<br>");
var rows = result.fetchObjects();
for (var i = 0; i < rows.length; i++) {
response.write(rows[i]["id"] + ":" + rows[i]["name"] + "<br>");
}
テンプレートを使う例
テンプレートを呼び出すファイルの記述
#!/test/v8cgi/v8cgi
library("template.js");
var t = new Template({suffix: "tpl.html"}); //現行バージョン(0.2.0)にはバグがあるのでsuffixを指定しないとエラーになる
var var1 = "abc"; //動的なデータは変数に入れておけばテンプレート内から参照できる
var var2 = 123;
response.write(t.process("example")); //現行バージョン(0.2.0)ではdataを渡しても無視される
テンプレートの記述(example.tpl.html)
<html>
<head><title>TEST</title></head>
<body>
This is a random number: $(Math.random())
$code( for(var i = 0; i < 10; i++) { )
<li>$(i)</li>
$code( } )
$(var1) $(var2)
</body>
</html>
REQUEST情報を取り出す方法
"HTTP_"で始まる情報はrequest.header()で取り出せるが、それ以外は直接_headersの中から取り出すしか無さそう。
#!/test/v8cgi/v8cgi
response.write(request._headers["SCRIPT_URL"]);
感想
- シンプルでよい。ソース追って理解できる。
- DBアクセス、テンプレートエンジン、メール送信と揃っていて、即戦力っぽい。
- DAOがORマッパーでなくSQLヘルパーなのが好き。さすがERDを描くためにツールを作ってしまった人だけある。
- DBアクセスがプレースホルダーでないのが残念。escapeはしているようだがPreparedでないと何かと嫌。
response.writeってのがASPみたいでちょっと嫌。echo()とかでラップすればよいが。- 実際に使うとしたらmod_rewriteを絡めたオレームワーク(オレオレ・フレームワーク)を被せることになりそう。
参考:Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ
2008年12月22日月曜日
MySQLの timestampの自動更新ができない場合の修復方法
例えばcreated_atにはINSERT文でvalueにシステム時刻をセットし、updated_atは自動更新させることを想定している場合。
下記のように、間違えてtimestamp型の列を複数定義すると、2つ目以降のtimestampは初期値がオールゼロになり、自動更新もされない。
DROP TABLE IF EXISTS `test`.`members`;
CREATE TABLE `test`.`members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
間違いに気づいて、Query Browserからテーブル定義を変更(created_atをdatetimeにして、updated_atのdefaultにCURRENT_TIMESTAMPをセット)しても、自動更新はされない。
なぜなら、Query Browserからテーブル定義を変更してtimestampにした場合、下記のようにON UPDATEの定義が無いから。
DROP TABLE IF EXISTS `test`.`members`;
CREATE TABLE `test`.`members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query Browserは、外部KEY以外のトリガーを作成できない。
なのでSQL文(DDL
ALTER TABLE members MODIFY updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
修正できた。
DROP TABLE IF EXISTS `test`.`members`;
CREATE TABLE `test`.`members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
参考:MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文
2008年9月6日土曜日
CakePHPで特殊な用途に使われるテーブルのフィールド名
- id:通常は、Railsと同様に一意になるAuto IncrementなIntegerにする。
ただし、CHAR(36)として作ると自動的に32バイトの「データベースを超えたレベルで」ユニークな文字列が登録される。 - title:Lists等で自動的に使われる文字列になるらしい。
- name:titleと同じ扱い。titleとnameが両方ある場合はtitleが優先される。
- created:登録日時。created_atでないので注意
- modified:更新日時。Railsと同様、timestamp型ではなくdatetime型にする
- updated:modifiedと同じ扱い。こっちの方がしっくりくるのに
CakePHP 1.2で bakeするメモ
CakePHP1.2では、bakeはこんな感じで実行できる。
cake bake
cakeコマンドはCAKE_HOME/cake/consoleディレクトリにあるが、
cake -app /path/to/app bake
bakeでのModelの作成はDBのテーブルを元にするので、DBにテーブルが1つも無いと怒られる。
テーブルを作ってからbakeすること。
Welcome to CakePHP v1.2.0.7296 RC2 Console
---------------------------------------------------------------
App : app
Path: CAKE_HOME/app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[Q]uit
What would you like to Bake? (D/M/V/C/P/Q)
> M
---------------------------------------------------------------
Bake Model
Path: CAKE_HOME/app/models/
---------------------------------------------------------------
Error: Your database does not have any tables.
bakeでModelを作るとオプションでvalidationも付けられる。
が、maxLengthなど値を指定するルールをbakeでどうやって指定するかわからない。
tags
- php (176)
- javascript (82)
- apache (54)
- windows (53)
- google (47)
- mysql (41)
- linux (39)
- security (39)
- css (38)
- network (37)
- api (36)
- web (35)
- ruby (34)
- install (31)
- mobile (31)
- firefox (30)
- html (27)
- ie (27)
- config (26)
- postgres (26)
- image (25)
- library (25)
- search (25)
- mail (23)
- db (22)
- feed (22)
- rails (22)
- amazon (19)
- cakephp (19)
- map (19)
- tool (19)
- url (19)
- video (19)
- service (18)
- ec2 (17)
- encoding (17)
- error (17)
- jquery (17)
- server (17)
- flash (16)
- hatena (16)
- setting (16)
- chrome (15)
- blogger (14)
- java (14)
- android (13)
- yahoo (13)
- yui (13)
- del.icio.us (12)
- extensions (12)
- http (12)
- sql (12)
- aws (11)
- compare (11)
- framework (11)
- microsoft (10)
- centos (9)
- date (9)
- free (9)
- google-maps (9)
- php5.3 (9)
- rss (9)
- safari (9)
- yum (9)
- https (8)
- office (8)
- python (8)
- smart-phone (8)
- trouble (8)
- version-up (8)
- web-browser (8)
- adsense (7)
- calendar (7)
- cdn (7)
- jquery-ui (7)
- rakuten (7)
- twitter (7)
- android-apps (6)
- backup (6)
- command (6)
- gmail (6)
- google-app-engine (6)
- pear (6)
- reference (6)
- test (6)
- tuning (6)
- ui (6)
- validation (6)
- xmail (6)
- xml (6)
- zip (6)
- amazon-linux (5)
- atom (5)
- excel (5)
- gem (5)
- ip-adress (5)
- opera (5)
- systemdesign (5)
- titanium (5)
- array (4)
- bookmarklet (4)
- bootstrap (4)
- cache (4)
- color (4)
- cron (4)
- crypt (4)
- customize-google (4)
- feedcreator (4)
- flickr (4)
- font (4)
- form (4)
- function (4)
- gettext (4)
- google-analytics (4)
- google-code (4)
- greasemonkey (4)
- helper (4)
- html5 (4)
- iphone (4)
- jquery-mobile (4)
- laravel (4)
- mac (4)
- password (4)
- perl (4)
- regexp (4)
- rspec (4)
- sbm (4)
- sitemaps (4)
- subversion (4)
- template (4)
- tls (4)
- trac (4)
- utf-8 (4)
- version (4)
- web-service (4)
- active-record (3)
- analytics (3)
- au (3)
- cloud (3)
- date-picker (3)
- dns (3)
- docomo (3)
- domain (3)
- firewall (3)
- ftp (3)
- git (3)
- google-calendar (3)
- google-docs (3)
- hardware (3)
- hatena-bookmark (3)
- hosting (3)
- i18n (3)
- ie8 (3)
- itamae (3)
- json (3)
- log (3)
- openssl (3)
- pdo (3)
- photo (3)
- png (3)
- post (3)
- postgis (3)
- price (3)
- prototype.js (3)
- s3 (3)
- selinux (3)
- seo (3)
- shift-jis (3)
- smarty (3)
- ssh (3)
- ssl (3)
- strage (3)
- string (3)
- tab (3)
- tortoise-git (3)
- url-shortener (3)
- user-agent (3)
- windows-update (3)
- xhtml (3)
- zend-framework (3)
- about-config (2)
- active-resource (2)
- aide (2)
- android-studio (2)
- anti-virus (2)
- auth (2)
- bing (2)
- bitly (2)
- blog (2)
- books (2)
- bootstrap-cdn (2)
- bot (2)
- browser (2)
- bug (2)
- capture (2)
- cdnjs (2)
- centos7 (2)
- cert (2)
- certbot (2)
- class (2)
- convert (2)
- cookie (2)
- csv (2)
- datetime (2)
- debug (2)
- django (2)
- dojo (2)
- download (2)
- dropbox (2)
- ebs (2)
- eclipse (2)
- editor (2)
- feedly (2)
- google-reader (2)
- google-search (2)
- grids (2)
- hash (2)
- highslide (2)
- ipad (2)
- japanese (2)
- jpeg (2)
- language (2)
- lets-encrypt (2)
- link (2)
- mcrypt (2)
- memory (2)
- mod-security (2)
- moible (2)
- mouse (2)
- music (2)
- node-js (2)
- oauth (2)
- paas (2)
- pdf (2)
- permission (2)
- pocket (2)
- rds (2)
- referer (2)
- rest (2)
- rewrite (2)
- rfc (2)
- sample (2)
- scraping (2)
- session (2)
- simplexml (2)
- sjis (2)
- smtp (2)
- snoopy (2)
- softbank (2)
- tag-cloud (2)
- task (2)
- tips (2)
- todo (2)
- tomcat (2)
- travel (2)
- update (2)
- upload (2)
- v8 (2)
- v8cgi (2)
- vmware (2)
- vue-js (2)
- webBrowser (2)
- wordpress (2)
- youtube (2)
- ab (1)
- actionscript (1)
- addon (1)
- adminer (1)
- aes (1)
- affiliate (1)
- ajax (1)
- analyze (1)
- android-market (1)
- apple (1)
- aurora (1)
- avast (1)
- bake (1)
- behavior (1)
- blowfish (1)
- bookmarks (1)
- bootswatch (1)
- bread-crumb (1)
- button (1)
- c (1)
- cakphp (1)
- camel-case (1)
- casio (1)
- chalice (1)
- circle-ci (1)
- clam-av (1)
- cloudformation (1)
- cloudfrare (1)
- cloudn (1)
- cloudwatch (1)
- cman (1)
- codec (1)
- codeigniter (1)
- counter (1)
- crawler (1)
- cucumber (1)
- dao (1)
- database (1)
- datastore (1)
- delete (1)
- dena (1)
- deploy (1)
- deprecated (1)
- design (1)
- django2 (1)
- dokuwiki (1)
- dump (1)
- ecoder (1)
- emacs (1)
- encrypt (1)
- english (1)
- erd (1)
- ethna (1)
- exception (1)
- f-route (1)
- file (1)
- filter (1)
- firebug (1)
- float (1)
- flv (1)
- font-awesome (1)
- font-family (1)
- fontawesome (1)
- format (1)
- formula (1)
- fulephp (1)
- gd (1)
- gdmail (1)
- gears (1)
- geo (1)
- geo-coding (1)
- geolocation-api (1)
- get (1)
- gis (1)
- github (1)
- go-lang (1)
- golang (1)
- goo (1)
- google-apps (1)
- google-checkout (1)
- google-labs (1)
- google-libraries-api (1)
- google-play (1)
- google-plus (1)
- google-trends (1)
- gpl (1)
- gps (1)
- gradle (1)
- grep (1)
- grid.css (1)
- grids.css (1)
- group-ware (1)
- hmac (1)
- hotel (1)
- html-escape (1)
- htmlsql (1)
- http-status (1)
- httpd (1)
- iaas (1)
- ids (1)
- ie6 (1)
- iftt (1)
- igoogle (1)
- iis (1)
- import (1)
- include (1)
- index (1)
- infra (1)
- innodb (1)
- insert (1)
- integer (1)
- ios (1)
- ipad-mini (1)
- ipod (1)
- itunes (1)
- j-phone (1)
- japan (1)
- jetty (1)
- jmeter (1)
- jruby (1)
- jsdelivr (1)
- kohana (1)
- labs (1)
- lambda (1)
- lamp (1)
- layout (1)
- lift (1)
- livedoor (1)
- load-balance (1)
- locale (1)
- logo (1)
- logwatch (1)
- lsync (1)
- magic-method (1)
- maintenance (1)
- math (1)
- maven (1)
- mbstring (1)
- md5 (1)
- menu (1)
- merb (1)
- migration (1)
- mime-type (1)
- minify (1)
- mock (1)
- mod-pagespeed (1)
- mod_cache (1)
- modernizr (1)
- module (1)
- monit (1)
- mootools (1)
- myisam (1)
- myrt-mobile (1)
- mysqldump (1)
- nec (1)
- neta (1)
- nginx (1)
- normalize (1)
- null (1)
- objective-c (1)
- on2 (1)
- onload (1)
- oo (1)
- openid (1)
- or-mapper (1)
- passenger (1)
- pc (1)
- pecl (1)
- photoshop (1)
- phpexcel (1)
- phpmailer (1)
- pipes (1)
- plugin (1)
- podcast (1)
- poderosa (1)
- port (1)
- postal (1)
- postfix (1)
- powerset (1)
- print (1)
- pure (1)
- python3 (1)
- qdmail (1)
- qr-code (1)
- query-string (1)
- quota (1)
- radio (1)
- rating (1)
- rbenv (1)
- reader (1)
- realtime-search (1)
- redhat (1)
- redmine (1)
- remi (1)
- replace (1)
- replication (1)
- request (1)
- require (1)
- reserve (1)
- reset (1)
- restore (1)
- return (1)
- reverse-proxy (1)
- rgb (1)
- rijndael (1)
- rkhunter (1)
- robots.txt (1)
- rootkit (1)
- round (1)
- rpm (1)
- rpmforge (1)
- rt (1)
- saas (1)
- safri (1)
- samba (1)
- scala (1)
- schedule (1)
- screen-shot (1)
- script.aculo.us (1)
- search-wiki (1)
- seasar (1)
- serverless (1)
- sever-side (1)
- sha-2 (1)
- sha-256 (1)
- sha-512 (1)
- share (1)
- shell (1)
- shopping (1)
- simpletest (1)
- simulator (1)
- sinatra (1)
- skype (1)
- sns (1)
- sort (1)
- sqlite (1)
- struts (1)
- sum (1)
- symantec (1)
- symfony (1)
- table (1)
- tag (1)
- tiips (1)
- timezone (1)
- title (1)
- toolbar (1)
- topic-path (1)
- tripwire (1)
- twango (1)
- uninstall (1)
- unit-test (1)
- url-encode (1)
- user-script (1)
- vacuum (1)
- virtual (1)
- voderfone (1)
- web-flavor (1)
- web-fonts (1)
- webdav (1)
- widjet (1)
- willcom (1)
- windows-10 (1)
- windows-7 (1)
- word (1)
- xen (1)
- xinetd (1)
- xmlrpc (1)
- xpath (1)
- xss (1)
- yaml (1)
- yii (1)
- zend (1)