Tag Archives: トラブルシューティング

CentOSでbzip2が解凍できないエラー

このエントリーをはてなブックマークに追加
はてなブックマーク - CentOSでbzip2が解凍できないエラー
Share on Facebook

bzip2ファイルを解凍しようと思ったら、見慣れないエラーが出ました。

# tar xvf paco-2.0.9.tar.bz2 
tar: bzip2: exec 不能: そのようなファイルやディレクトリはありません
tar: エラーを回復できません: 直ちに終了します
tar: Child returned status 2
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました

ただ単にbzip2がインストールされていなかったのが原因でした。yumで入れて即解決です。

# yum -y install bzip2
...
Installed:
  bzip2.x86_64 0:1.0.3-6.el5_5                                                                                     

Complete!

CloudCore VPSでこのエラーに遭遇しました。 CentOSの最小構成でインストールされているようで、ごく普通のコマンドが使えないことが多いです。 パッケージが不足していないか注意が必要ですね。

参考

HTTP_Request2でhttps接続できない場合の対策

このエントリーをはてなブックマークに追加
はてなブックマーク - HTTP_Request2でhttps接続できない場合の対策
Share on Facebook

HTTP_Request2::send()でhttpsサイトに接続しようとしたら、下記のようなエラーが返ってきました。

Malformed response:
Unable to connect to ssl://www.google.com:443.
stream_socket_client(): unable to connect to ssl://www.google.com:443 (Unknown error)

Unknown errorというのが一番タチが悪い。エラーが追えません。

検証のためcurlコマンドで同じURLに接続を試みると、ちゃんとレスポンスが返ってきます。何か設定をし忘れているに違いない。

原因

どうやらHTTP_Request::setConfig()で正しい接続設定を行えていない場合、”Malformed response”というエラーが出るようです。 私の場合、オレオレ証明書の許可と社内プロキシの設定を行っていなかったためにはまってしまったようです。

対応

オレオレ証明書を持ったサイトを許可するために、setConfig()でssl_verify_peerssl_verify_hostをfalseに設定してやります。 また、プロキシの設定も行います。

<?php
require_once('HTTP/Request2.php');
$req = new HTTP_Request2();

$req->setConfig(array(
    'ssl_verify_host' => false,
    'ssl_verify_peer' => false,
    'proxy_host' => 'uso.proxy.jp',
    'proxy_port' => '8080',
));

$response = $req->setUrl("https://www.google.com/")->send();
print_r($response);     // HTTPレスポンスが出力される

ほかにも設定項目はあるので、マニュアルを参考に設定を疑ってみてはどうでしょうか。

参考

fixtureがテスト用データベースに反映されない?

このエントリーをはてなブックマークに追加
はてなブックマーク - fixtureがテスト用データベースに反映されない?
Share on Facebook

CakePHPでフィクスチャを作成したけど、テスト実行時にフィクスチャではなくDBのデータをロードしてしまう。ちゃんとテストケース内で $fixtures に設定しているはずなのに。

そんな症状に長らく悩んでいましたが、結論から言うと、$fixturesで指定しているフィクスチャ名を書き間違えていたせいでした。ファイル名を間違えている時、テストケースはエラーを吐かず、DBを読みに行ってしまうようです。

ずいぶん悩みましたが、初歩的なミスでした。

確かめた記事

Mark Story「1.2のNightlyリビジョンで直ってるよ」

→解決してない

「フィクスチャがDBに入らないんだけど」

「テスト動かせば自動で入るよ」

「知ってるよ。そのはずなのに入らないから聞いてるんだ」

返事無し

execコマンドでcdできないとき

このエントリーをはてなブックマークに追加
はてなブックマーク - execコマンドでcdできないとき
Share on Facebook

PHPのexec関数でシェルコマンドを実行する際、cdコマンドは実行できません。 代わりにchdir関数を使うことができます。

<?php
// 現在のディレクトリ
echo exec("pwd") . "\n";            // /home/uso

// exec('cd ***')で /home に移動してみる
exec("cd /home");
echo exec("pwd") . "\n";            // /home/uso (変わってない)

// chdirで移動してみる
chdir("/home");
echo exec("pwd") . "\n";            // /home (変わってる)

参考

改行コードがうまく解釈されないとき

このエントリーをはてなブックマークに追加
はてなブックマーク - 改行コードがうまく解釈されないとき
Share on Facebook

今さらですが、PHPの引用符(’)と二重引用符(”)の違いを知りました。

引用符 二重引用符
変数名 パースされない パースされる
エスケープシーケンス 書いたままの文字で出力される エスケープシーケンスが出力される

最近何かとシングルクォーテーションばかり使うようにしていたのですが、基本的にダブルクォーテーションの方が高機能で使いやすいようです。

引用符で囲った文字列を「\n」でexplodeしようとしても全然うまくいかず、詰んでいました。参考リンクの筆者に感謝します。

参考

CakePHPでいわれのない「Missing database table」エラーを直すには

このエントリーをはてなブックマークに追加
はてなブックマーク - CakePHPでいわれのない「Missing database table」エラーを直すには
Share on Facebook

モデルの名前を修正して、再度Bakeしようとすると以下のようなエラーが。

Error: Missing database table 'people' for model 'Person'

「people」テーブルはさっきDBから消したので、存在していません。いったい何を見てエラーを出しているのか。

Googleでエラーメッセージを検索すると、「/app/tmp/cache/配下のキャッシュを消せば直る」という記事が。さっそく消して見るも、やはり同じエラーが出ました。

思い切って /app/models配下にあるモデルをすべて消したところ、無事bakeができるようになりました。

作成済みのモデルも見てリレーションを判別していたのでしょうか?何という想定外な仕様。

XAMPPのMySQLで正しくUTF-8を使えるようにする

このエントリーをはてなブックマークに追加
はてなブックマーク - XAMPPのMySQLで正しくUTF-8を使えるようにする
Share on Facebook

XAMPP 1.7.3 に入っているMySQLは、デフォルト設定だと文字コード指定が適当なので、普通に使っていると文字化けすることがあります。

コマンドプロンプトから下記を実行すると現在の文字コード設定が確認できます。

[c:\]$ c:\xampp\mysql\bin\mysql -uroot

mysql> SHOW variables LIKE '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | latin1                         |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | latin1                         |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

これをどうにかするため、c:\xampp\mysql\bin\my.ini を下記のように変更します。

# [client]ブロックに下記の行を追加する
default-character-set=utf8

# [mysqld]ブロックに下記の行を追加する
default-character-set=utf8
skip-character-set-client-handshake

これでMySQLを再起動すると、文字コード設定がUTF-8になります。

[c:\]$ c:\xampp\mysql\bin\mysql -uroot

mysql> SHOW variables LIKE '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

参考

TortoiseSVNでバージョン情報などを自動で埋め込む

このエントリーをはてなブックマークに追加
はてなブックマーク - TortoiseSVNでバージョン情報などを自動で埋め込む
Share on Facebook

オープンソースコード等を見ていると、リビジョン番号などがソースに記載してあることがあります。 どうやらSubversion(やCVS)で実現できるようです。

私は基本的にWindowsでTortoiseSVNを使ってリポジトリのやりとりをしているので、その設定方法をメモしておきます。

手順

1.TortoiseSVNの設定

今回は例としてPHPファイルが自動変換されるよう設定します。

  1. svn管理下のファイルを右クリック->TortoiseSVN->設定
  2. [一般]カテゴリ内の、「Subversionの設定ファイル」の横にある[編集]ボタンをクリック
  3. テキストエディタでconfigファイルが開くので、以下のように修正する
enable-auto-props = yes    ←コメントアウトを外す

[auto-props]
*.php = svn:keywords=Id Date Author Rev

2.対象ファイルにsvnキーワードを埋め込む

キーワードは「$Id$」のように、「$」で囲みます。 使用可能なキーワードは Subversion キーワードの展開 – とみぞーノート あたりを参考にしてください。

/**
 * テストクラス
 * 
 * @author  $Author$
 * @version $Id$
 */
class Uso
{
    ...
}

3.コミットしてみる

ファイルをコミットしてみて、リポジトリブラウザで参照して置換されていれば成功です。

/**
 * テストクラス
 * 
 * @author  $Author: Senda Keijiro $
 * @version $Id: uso.php 13 2010-10-27 05:33:51Z Senda Keijiro $
 */
class Uso
{
    ...
}

注意

自動置換は上記設定を行った以後に作られたファイルのみに行われます。 既存のファイルも自動反映したい場合は、ファイル毎に設定する必要があります。

  1. 既存のファイルを選択して右クリック
  2. [Subversion]タブ->[属性]ボタン
  3. 恐らく未設定なので、[新規]ボタンをクリック
  4. [属性名]に「svn:keywords」、[属性値]に「Id Author Rev Date」(1単語ずつ改行)を書いて[OK]

これで、ファイルをコミットすると自動でキーワードが置換されるようになります。

参考

tracのレポートでカラムの表示・非表示を切り替える

このエントリーをはてなブックマークに追加
はてなブックマーク - tracのレポートでカラムの表示・非表示を切り替える
Share on Facebook

業務上tracを使っています。

チケットを抽出するSQLをいじったとき、SELECTしたいカラムが画面に入らないことがよくありました。ヘルプを見てもよくわからなかったので、メモしておきます。

項目の表示・非表示を切替え方

  • SELECT句のASで指定する別名の先頭に「_ (アンダーバー)」をつけると、画面では非表示になります。
  • レポート最下部の「異なるフォーマットでダウンロード:」からRSSやCSVでダウンロードすると、中に含まれていることがわかります。

サンプル

SELECT
    p.value     AS __color__
  , version     AS __group__
  , id          AS ticket
  , summary     AS 概要
  , component   AS コンポーネント
  , milestone   AS マイルストーン
  , t.type      AS 分類
  , owner       AS 担当者
  , status      AS ステータス
  , time        AS 登録日付
  , changetime  AS 更新日付
  , description AS _説明        -- 画面には非表示
  , reporter    AS _報告者      -- 画面には非表示
FROM
    ticket t
    LEFT JOIN enum p 
    ON p.name = t.priority AND p.type = 'priority'
WHERE
    status <> 'closed'
    AND version = '2.0'
ORDER BY
    (version IS NULL)
  , version
  , CAST(p.value AS int)
  , t.type
  , time

Smartyテンプレート内でissetやemptyが使えない場合

このエントリーをはてなブックマークに追加
はてなブックマーク - Smartyテンプレート内でissetやemptyが使えない場合
Share on Facebook

テンプレート内のif文で「isset()」や「empty()」などのPHP関数を使いたかったのですが、エラーになってしまいました。

どうやら、テンプレートのどこかで $default_modifiers を設定すると、使えなくなってしまうようです。 私の場合はEC CUBE改造中にこの問題にぶつかりました。grepしてみたら、/data/class/SC_View.php あたりで設定してしまっている模様。

対策としては、「{if isset($var|smarty:nodefaults)}」のように修飾子を追加して、default_modifiersを無効にすると良いようです。

修飾子のルールが未だによくわかっていないので、なぜこれを追加すると動くのかも理解していません。 (この仕様はあまりSmartとは思えないです)

参考

Smartyでdefault_modifiers指定時に{debug}を使う方法 | twk @ ふらっと