上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VMWareへcentOS6.3をインストール

お久し技術ブログ。

Jenkinsさんを使ってAndroidアプリ開発を行いたいな~と思いました。
とりあえずjenkinsさんはGUI触っただけ、
androidアプリは開発環境いれてテンプレソースを触っただけ。
という初心者ぶり。

ひとまず、vmでjenkinsさん動かせば、壊れても戻せるし使いまわせるし
勉強にもなるし、vmにOSインストールはMacOSしかしたことなかったし!
というわけで。。。
インストールをする運びとなりました。


今回は単純にかけば以下の通り。

1.VMWare Playerを公式から最新版をダウンロードし、インストールする
2.公式からcentOS6.3のisoをダウンロードしてくる
3.centOSをVMWareへインストールする


1は問題なく終了。
2はnetinstall.isoをダウンロードしてきました。
3は果てしない旅路でした。

まず、VMWare Playerをインストールした後、
日本語名のところにインストールしてしまったことに気づき、フォルダ名を変更していました。
VMWareを起動するまわりはアドレス変更を行っていましたが…。

自動で立ち上がるVMWareのAuthなんとかサービスが起動しなくなっていました。
そのためエラーが頻発!
Authなんとかサービスが起動してないとかなんとか。。。

コンパネからサービスを確認してみると、なんと起動パスが違う。
前の、古いフォルダ名になっていました。

http://d.hatena.ne.jp/nketomok-asa/20060503
上記ページにたどりつき、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<サービス名>のImagePathを修正。

しかし、インストールを行ってくれず、エラーばかり。
Authなんとかのエラーから、インストール時にちゃんとしたメモリスペースがなんとやら…
だそうです。

というわけで、メモリ使用の設定を1G→512MBにしました。
もともとのPCの容量がメモリ2GBなので、とても貧弱だったようです。

すると、メモリのエラーはきえました。
しかし、インストールが起動できないと!!エラーが出続けます。

いみわかんねーよちくしょう!と思いながら、ググってると、
どうやら頻発するなら再インストールしろとかいてありました。
VMWareインストーラから修復を選択して再度vmを最初の状態に戻します。

そして再起動して試すと……なんと動いてくれました!!
二重三重の罠!(1つは自分で設置した)を乗り越えた!

あとはインストールするだけ。
netinstall.isoを選択してインストール画面キタアアアア!!
しかしmedia checkから先に進めない!
そんな!くそう、英語むずかしい。やり方が謎い……
参考にしていたサイトにはそんなことは何も書いてなかtt…
(後から確認したところ、ちゃんと書いてあったが見落としていた)

もう結局6.3のDVD1.iso,DVD2.isoのファイルをダウンロードしてインストールすることに。
簡単インストールによってサクサク進む!うれしい。

以下のサイト様にお世話になりました。
http://www.e-agency.co.jp/column/20121004.html
http://freesoft.tvbok.com/freesoft/virtual/vmware_centos3.html


しかし果てしなく時間がかかった。。。
しかし、次回からはすんなり入れられるはず!(次回っていつ)
次いれるなら、やりたいことにもよるけどUbuntu入れるかな~。

symfony Cannot redeclare class で エラー

お久更新です。

未だsymfonyさんとキャッキャウフフしてます。


新しくバッチ用タスク作ったし、スキーマとか再生成しよーっと。

C:\xampp\****** >symfony propel-build-schema
PHP Fatal error: Cannot redeclare class △△Task in C:****.php on line 131

Fatal error: Cannot redeclare class △△Task in C:****.php on line 131


…なんだろうこれ^^;


schemaも、modelも、ccも、symfony -?ですらもこのエラーでストップ!


ソースを見直したら、
コピペ元と同じクラス名だったりしたもんで、
これかー!と思って修正。

そして…

C:\xampp\****** >symfony propel-build-schema
PHP Fatal error: Cannot redeclare class △△Task in C:****.php on line 131

Fatal error: Cannot redeclare class △△Task in C:****.php on line 131

(^o^)なんでー


これでぐぐったりとかいろいろ悩んだんですけどなおらなくて。
先輩からこれやったらどう?って言われてやってみたら直りました。

---
修正した△△タスクではなく、コピペ元の○○タスクをいったん削除して
スキーマ等再生成等を行い、○○タスクを復活させてもう一度再生成する。
---

被り元を無くして正しく生成させてからじゃないと、
戻せないんですねー。

きっとまたやらかすので、備忘込めたメモ。

PHPで落とし穴あった

PHPといえば型がない。
型がないので、比較処理ってどうしたらいいのかしら。
ってなことでちょっと前に調べていた記憶があります。

特に文字列の比較で"==="を使うとか、なんとか、その辺書くとき気を遣えよ!
って言う記事が多かった気がします。変な動きをするんだとか。

以下のサイトとか、簡易表になってて重宝してたのですが、、、
http://itpro.nikkeibp.co.jp/article/COLUMN/20080519/302256/

今回変な動きをしていたのでこの表が覆されましたw
バージョンによっても違うのかな??
楽せず正しくかけよってことですね。スミマセン

if(文字列が入るはず == 0)
って判定をしていたら、"1"や"0"は問題なし。
でも""(空文字列)が入った場合に一致してしまう事が判明。

正しい記述は
if(文字列が入るはず === "0")
なので気を付けましょう。

気を付けましょう。  …ハイ、気を付けます。

symfonyとか携帯系自分メモ

最近の近況。
引き続きSymfonyフレームワークを用いたWebサイト対応してます。
最近は同フレームワークを用いて携帯サイト対応なうです。


★携帯の個体識別情報取得
http://www.centsys.jp/service/technical_information/symfony/mobile_development.html
このサイトのソースを参考にして、セットアップ。
自分の場合はDOCOMOはFOMAカードIDを取りたかったので、
checkメソッドをいじって、isDOCOMO且つisFOMAの場合に取得するようにした。
※FireFoxのアドオンであるFireMobileSimulatorを使って確認していると、FOMAの端末の場合に取得できず
 メソッド自体で実行エラーとなってしまったが、実機で試すとちゃんととれた。


★新しくsymfonyのタスククラスを作るよ!
・あれ?作ったけどDB接続できないぞ?
エラーメッセージ:No connection information in your runtime configuration file for datasource [propel]
で、答えは以下。
// initialize the database connection
$databaseManager = new sfDatabaseManager($this->configuration);
$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
が書いてなかった。

・あれ?エラーメッセージ変わったけど動かないぞ?
エラーメッセージ:Database "" does not exist.
で、答えは以下。
configureメソッド内のオプション指定でDB指定してなかった/(^o^)\
代わりに変な指定をしていて、そこに'propel'って書いてあったので、
ひとつ前のエラーに[propel]って入ったんだろうなと推測。
変な指定を消して、以下の一文に書き換えで解決。
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'), // add your own options here


★エイリアスの設定
空メール送信を受信したタイミングで、Aliasで設定したsymfonyのtaskを実行するというもの。
・symfonyのタスクが動かないぞ!
aliasesファイルに以下の様に設定。
メールのユーザ名: "|/var/www/html/プロジェクト名/symfony ○○:○○"
aliasesを使ってパスを張り、symfonyコマンドをどこからでも叩けるようにするとかも
ググってたら出てきたので面白そう。
http://d.hatena.ne.jp/Yudoufu/20080418/1208535787
自分では全然常識じゃなかったからちょーーとしたことではないんだがw
為になります。


★空メール送信するよ。
・おや、エラーでおちるぞ?
どうやらファイルのアクセス権限が無かったらしい。

・あれ、まだエラーで落ちるぞ?エラーメッセージとっとくの忘れた
ライブラリ読み込みが成功していなかった。
参考にしたサイトさんではあらかた
require_once('Mail/mimeDecode.php');
こんな記述なんだけど、自分の環境だとそれでは参照できない構成だったので
require_once('./../../../usr/share/pear/Mail/mimeDecode.php');
こう書くと実行できた。設定ファイル何か足りないのかなー。
とりあえず時間がないのでここまで。
※追記:検証用環境だとルートが設定してあるのか、
require_once('/usr/share/pear/Mail/mimeDecode.php');
でいけましたっと。



★検証用の環境で画像が確認できないよー
・アドレスの関係で相対パスから絶対パスに変更。
ここで1つ新出単語。「絶対パス」
先輩の簡易説明後ググって、今まで言ってた絶対パスと違うことが判明。
詳細はこちらのサイトさんへ。
http://www.nikolaschka.com/log/2007/08/absolute_path_20.html

ちなみにローカルで見えなくなったから設定しようと思ったんだけど
過去に残した設定が色々あってめんどくさくて放置なう




もっと色々あったんだけどメモとってなかったので記憶に残っていたものだけ。
エラーメッセージも取って置けばWEB検索でひっかかるから役に立つんだろうけど…スイマセン

symfony の fetch()つかってたらエラー。fetchAllってなんぞ?

今回symfonyを使っての開発でまたエラー的な何かが。
解決したのは先輩なんだけど、一応残しておく+ちゃんと知っとこうと思って調べてみました。

出ていたエラーはコチラ

" General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll()"とかなんとかかんとか

とりあえずPDOまわりのことでしかもfetchAllについてらしいが、よくわからない。
このときはソース内では普通にfetch()を使っていて、
しかもローカルでも検証用環境動作していたため、運用用の環境で突然起きたことがイミフ状態。

自分達のやっている開発では、結局解決策はfetch()を使っている箇所をすべてfetchAll()にするという方法でした。
が、いまいちなんで使っちゃいけないのか私全然わかってない・・よ!
とりあえず直したら動くよみたいな!


というわけで、ちょっとググッてみた以下
http://rugoh.dgblog.dreamgate.gr.jp/e64160.html

PDOに関連するらしい。自分のSymfony+PHPだけではなくてOpenPNEとかの開発でも同じ現象おきるんですね。

まぁまずはfetch()って何ぞ?
http://php.net/manual/ja/pdostatement.fetch.php
switchでくるくる回しながら1レコード配列づつ取得しつつ、
$使いたい変数 = $row['カラム名'];
みたいな感じで使うものというイメージ。

そして話題のfetchAll()って何さ?
http://php.net/manual/ja/pdostatement.fetchall.php
すべてのレコード内容を一気に取得するので、
$row[i番目のレコード]['カラム名']みたいに使うイメージ。

ループで回してあげればいいってことかな。
とりあえずこの方法で自分達は回避したのですが・・・

でも何でfetch()ではなくてfetchAll()使わないとなの!?
書き直しが全然難しくはないけど最後に知ったらめんどいじゃない!?
使用条件とかあるんじゃないの?!

荒らぶりましたがさらに調べてみることに。

http://docwiki.embarcadero.com/VCL/ja/DBTables.TBDEDataSet.FetchAll

重要そうなのはこのあたり?
利点)
キャッシュアップデートを使用するときのネットワークトラフィックを減らすことができます。
欠点)
同時に多数のクライアントによって使用されているデータベースにアクセスし,同一のレコードの更新の競合が頻繁に起こる場合,一度にすべてのレコードを取り出すことは必ずしも有効ではありません。
といったところでしょうか。

他にも互換性があるのかな?
http://manual.xwd.jp/ref.pdo-mysql.html
PDOStatement でこの属性を TRUE に設定すると、 MySQL ドライバはバッファ版の MySQL API を使用します。 移植性の高いコードを書くには、代わりに PDOStatement::fetchAll() を使用すべきです。

DBアクセス時のスタイルが変わるってことかな?
でも他のDBに移植しやすいfetchAll使ったほうがいいよって書いてありますね。


このようにfetchAllの利点欠点がなんとなく判ったので、じゃあなぜ自分達の環境ではfetch()を認めてくれないエラーがでていたのか?

そういえば先輩が言っていたことを思い出しました。
fetch()のループの中でfetch()したらエラーでるよ」と。
これのことかああああ!
http://www.infinity-blue.jp/archives/48

うん、なんとなくつながったかも。

つまり…

fetch()は2回重複できません、
重複するfetch()使うなら、PDO::MYSQL_ATTR_USE_BUFFERED_QUERYの値をtrueにするように。
ただしこの設定はmySQLのみのもので、互換性がないため、
互換性のあるfetchAll()を利用したほうが良い。

また、開発中の案件内容によってはfetchAll()を使うことで
同一のレコードの更新の競合が頻繁に起こる場合がありうるのであれば、
使用箇所の検討や方針が必要になり、fetch()を使ったほうがよい場合も存在する。

こんなところですかね。
今回の疑問は大体とけたのでここまで。

ここちがうよ!とか
こうしたほうがいいよ!というやり方があれば
突っ込んでやってください。
プロフィール

nkd_a

Author:nkd_a
ぽつぽつと気になった事をメモしてます。
最近はandroidとphp、あとは勉強会とかそのへんです。
ツイッターどうでもいいことしか呟いてません。

最新記事
カテゴリ
Twitter
 
リンク
検索フォーム
最新コメント
最新トラックバック
かうんたぁ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。