Invalid signature

ここは俺の日記帳

ロリポップに CakePHP を設置する際に躓いたこと

phpMyAdmin 上で SQL がエラーになる

テーブルの作成は上手く行ったのだが、マスターデータを挿入する SQLファイルを
サーバにアップし、SOURCE複数連ねてまとめて流し込もうとしたが
エラーが発生した。
これはなぜか PuTTY でログインして mysql でやったら上手く行った。

画像が表示されない

パスがおかしいのかとも思ったが、スタイルは適用されていた。
WinSCP でサーバ上の画像をダブルクリックで開くとデコードエラーが出たので
それかとも思った。 しかしそのファイルをダウンロードして表示すると
エラーにはならず、正常に表示された。

これは画像の直リンクを防止する記述が .htaccess にしてあり、この処理は
設置してある場所のドメインが記述してある必要があったためであった。
参考記事: http://www.hideblog.net/nikkis/show/113/

PreloadJS による画像のロードが失敗する。

これは CakePHP ではなく CreateJS に関する問題。
画面が表示されず、コンソールをチェックすると画像オブジェクトからサイズを
取得しようとしている箇所で画像が null になっていた。
キューオブジェクトのエラーイベントにリスナを設定してチェックすると、
確かにエラーになっていた。

これは画像のパスの頭に ../ を追加したら上手く行った。

404 ERROR FILE NOT FOUND

これは ajax でアクションを呼ぶ際に、アクションのパスの頭に /cake
を追加したら解決した。

これはロリポップが提供している CakePHP のインストール手順に、
「ルートに cake ディレクトリを作り、そこに cake を設置する」
という手順に沿ったためと思われる。

メールが送信できない

CakeEmail::send を実行したところ、以下の様なエラーが出た。

php_network_getaddresses: getaddrinfo failed: Name or service not known
  

調べてみるとこれは cake が原因ではないらしい。
CakeEmail 周りで調べてて、transportMail
している記事を見かけた。 ここが Smtp だったので試しに
Mail に変えてみたところ上手いく行った。

cakeディレクトリの下にインストールする際は注意

上のもろもろの後、ファイル群をルートに移動してテストしたところ、
PreloadJS のパスに起因するロードエラーと ajax の通信パスの問題は
この「cakeディレクトリの下にインストール」が原因ということがわかった。
これらを多く用いている方は修正箇所が多くなるので注意されたし。

ボタンに Javascript の処理を割り当てる時に注意すべきこと。

CakePHP v2.4.6

CakePHP のフォームヘルパーでボタンを追加し、onClick イベントに
Javascriptalert を追加したところ、ダイアログが出なかった。

ネットで調べてもサンプルコードに特にそれらしい間違いは認められなかった。

サンプルコードを眺めていると、ふとスクリプトの括りが自分と違っていることに
気付いた。

自分のコードではまずシングルクオーテーションで括り、alert 内の
文字列をダブルクオーテーションで括っていた。

そこでこれを入れ替えたところ alert のダイアログが
出るようになった。

原因を調べるも

原因が気になって少し調べてみたが、シングルとダブルで処理速度が違うとか、
それは迷信だとか、改行文字が展開されないとか、この原因と思しき情報は
見つけられなかった。

シェルスクリプトで配列を使用した際のエラー

シェルスクリプトで配列を使ったら以下の様なエラーが出力された。

Syntax error: "(" unexpected
  

調べてみると以下のサイトに答えがあった。
http://pc.casey.jp/archives/153904527
Ubuntu では /bin/shbash を指していないため」ということらしい。
dash と bash の切替方法も載っていたが、面倒なのでとりあえずこのまま。
不便を感じるようなら対象しよう。

mod_rewrite を使わない場合の構成・設定[1]

CakePHP v2.4.6

前回、CakePHP のウェルカムページを見れるところまで進んだ。
しかし、スタイルが適用されていない。
ディレクトリ構造を提示しつつ整理することにする。

①app を public_html の外に設置したパターン

前回用いた構成はコレ。

この各ディレクトリは、webrootを除いて、ファイルシステム内の
どこにでも配置できます。
引用元: http://book.cakephp.org/2.0/ja/installation/advanced-installation.html#cakephp

ということなので、可能な限り public_html 以下に置くファイルは減らそうと、
はじめは以下の構造にした。

/┬─app
 ├─lib
 └─public_html
  

public_html には webroot の中身を設置。

index.php の編集

define('ROOT', DS. 'home' . DS . 'ユーザー名');
define('APP_DIR', 'app');
define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
  

上のような状態ではスタイルが適用されなかった。 スタイルシートのパスは
"/app/public_html/css/スタイルシート名" となっていた。
webroot を public_html に改名してもダメ。 WEBROOT_DIR をルートからの
絶対パスにしても、頭に "/app" が付いてしまいダメ。

②app を public_html の下に設置したパターン

/┬─lib
 └─public_html─app
  

index.php の編集

define('ROOT', DS. 'home' . DS . 'ZombieCake' . DS . 'public_html');
define('APP_DIR', 'app');
define('CAKE_CORE_INCLUDE_PATH', DS. 'home' . DS . 'ZombieCake' . DS . 'lib');
  

上の構成に加え、webroot を public_html に改名したところスタイルが反映された。
スタイルシートのパスは①と同じだった。

色々こねくり回していると、どうやらスタイルシートのパスは
public_html下を起点にした相対パスになっているらしい。
この事を証明すべく構成①で index.php の WEBROOT_DIR を
以下のように定義したところ、スタイルが反映された。

define('WEBROOT_DIR', DS . '..');
  

パスは次の通り "/app/../css/style.css"
app から一階層もどり、public_html に設置してある css ディレクトリに
アクセス出来たようだ。 public_html下に app という名前のディレクトリは
無いのだが…
 とにかく、スタイルシートのパスの頭に "/app" が付いていたため、
ルート直下に app というディレクトリがあると想定していると思い込み、
非常に混乱した。

mod_rewrite を使わない場合の構成・設定[0]

CakePHP v2.4.6
mod_rewrite が使えないサーバーに CakePHP を展開したところ以下のエラーが出た。

Warning: _cake_core_ cache was unable to write 'cake_dev_ja' to File cache in ***/lib/Cake/Cache/Cache.php on line 325
Warning: /***/app/tmp/cache/persistent/ is not writable in /***/lib/Cake/Cache/Engine/FileEngine.php on line 384
  

エラーメッセージを見ると lib 以下に問題があるようにとれるのだが、
これはブログチュートリアルにあった「Tmpディレクトリのパーミッション
の記述を参考に対処できた。
 ターミナルでアクセスできないサーバーで
所有者を変えるコマンドが FTP クライアントに見当たらなかったため、
app/tmp の「その他」のユーザーに書き込みの許容を再帰的に行うと
ウェルカムページを見ることが出来た。

git: show で指定したファイルが違うと怒られる

ファイラから変更を破棄する機能、TortoiseSVN でいう「もとに戻す」
を使えるようにしようとしていたところ、 git show HEAD:ファイル名
を実行した際に以下のようなエラーが出た。


fatal: Path 'リポジトリトップからのファイルパス' exists, but not
'ファイルパス'.
Did you mean 'HEAD:リポジトリトップからのファイルパス' aka 'HEAD
:./ファイルパス'?
  

「もしかしてコレ?」に従い「./(ドットスラッシュ)」をつけたら上手く行った。
コレについて調べたけど答えが見つからなかった。 知ってる人いたら教えて下さい。

Windows8: スリープ or 休止から復帰できない。

ある日、PC が勝手にオフになっていた。 電源ボタンを押すと、起動しようとして BIOS まで行かずに電源が切れるのを
何度も繰り返す。

仕方ないので HDD ランプが点いていない時に PC背面の電源スイッチをオフにして
止めた。
とりあえず CPUファンを見ると、ホコリが溜まっていたのでダスターで取り除いて
再度電源を入れると立ち上がった。

初めて見る症状

めでたしめでたし…かと思いきや、気持ちの悪いことに PCの状態が最後に見た時と
同じだった。 最後に見た時に立ち上げたアプリがそのまま立ち上がっていたのだ。
電源を切ったはずなのに。 こんな事は PC を使っていて初めてだ。
気持ちが悪いので一度再起動した。

再発

PC を点けたまま寝落ちした。 起きるとまた勝手に電源が切れており、
電源スイッチを入れると上で述べた症状が再発した。
前はホコリが溜まりすぎたのが原因かと思ったが、今回はファンを掃除してから
日が浅い。 前回と同じように背面のスイッチで止めた後、直ぐにそのスイッチを
オンにしてから電源を入れると前回と同じように立ち上げていたアプリが
そのままだった。

仲間探し

同じような症状が他で起きていないか調べてみたところ、二件みつけてた。
http://oshiete.goo.ne.jp/qa/8495294.html
http://takaokouji.hatenablog.com/entry/2014/01/18/160415
一件は Surface で起きたことだが症状は似ている。

対策

とりあえず「電源のオプション」で「コンピューターをスリープ状態にする」を
「適用しない」にしておいた。