Hatena::ブログ(Diary)

on the center line.

2009-04-22

symfonyのmoveFile()メソッドでファイルが移動できない

| 19:52

symfonyではアップロードファイルを、任意の場所に移動させる moveFile というメソッドがあるのですが、このメソッドは失敗したときにエラーを出してくれない。

$this->getRequest()->moveFile('filename', $destFileName)

なので失敗していて、かつ原因がわからない場合は、lib/symfony/sfWebRequest.class.php

@move_uploaded_file(...

となっているところの「@」をはずしてやるとよい。まあ、大抵はディレクトリパーミッションの問題だったりするんだけど。

2008-12-29

WindowsのApacheでPHPを動かそうとしたときに、Cannot load mysql extension. といわれた

| 01:37

Windows 上に、Apache + PHP + MySQL の環境を構築していて、ハマった問題と解決策のメモ。

■事象

PHPからMySQLに繋ごうとすると、Cannot load mysql extension.というエラーが発生。Apache のログにも以下が出力されていた。
PHP Warning:  PHP Startup: Unable to load dynamic library 'C:/Program Files/php-5.2.6/ext/php_mysql.dll'
※PHPインストール&設定は、Webなどに掲載されているとおりに正しく実施している

■原因&対策

Windows上でPHPから、MySQLに繋ぐには、適切なバージョンのlibmysql.dll がパスの通ったところになければならない。
普通にWindows用のPHPインストールすると、インストールディレクトリにlibmysql.dll があるので(インストールディレクトリにパスを通していれば)問題にはならないが、この「適切なバージョンの」というところがポイント。
僕の環境では古いMySQLインストールされていて、かつ、そのMySQLがパスの前の方に指定してあったため、別の「libmySQL.dll」が読み込まれて、上記エラーが発生していました。パスの順序を修正して解決。

いやあ、悩んだ・・・orz

2008-10-07

Eclipseプロジェクト内に、Validate対象外のディレクトリを作る方法

| 16:55

Eclipseプロジェクト内に、Tomcatのランタイムを格納すると便利だと思ってやってみたのですが、TomcatのサンプルのWebアプリが検証にひっかかってしまって、Eclipse上に大量のエラーがでてしまいました。

Tomcatのサンプルを捨ててしまうという解決策も考えたのですが、そもそも「Eclipseで特定のディレクトリ以下を検証の対象外とする方法はないのか?」という点が気になったので調べてみました。

結論からいうと、Eclipseの機能としてはない、が少しトリッキーな方法で実現できました。

まず、Eclipseの検証機能ですが、これはプロジェクト単位で有効/無効を切り替えることはできますが、ディレクトリ単位では無理なようです。一方で、Eclipseの機能として「.(ドット)」で始まるディレクトリは管理対象(検証対象)としない、という機能があります。これを利用しました。

つまり、Eclipseプロジェクト内に「.Tomcat」というディレクトリを作りました。そして、その下にTomcat一式を置くと、、、

検証エラーを発生させることなく、Tomcat一式をEclipseプロジェクト内に置くことができました。

ちなみに、「.(ドット)」から始まるディレクトリは管理対象(=検証対象)にはならないのですが、ライブラリ選択や、サーバ選択では普通にでてきました。万事解決。

2008-10-03

Java1.6+Antを動かそうとすると、java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher

| 10:26

Linux(Fedora)に、Java1.6とAntをインストールして、いざAntを動かそうとすると表題のエラーが発生。

Javaは、jdk-6u7-linux-i586-rpm.bin をダウンロードしてインストール、Antは yum install antでインストールしたもの。

原因調査のために、まず、javaコマンドから実行

java -cp /usr/share/java/ant-launcher.jar org.apache.tools.ant.launch.Launcher --help

これは問題なく動いた。ということは、/usr/bin/ant の問題か。次に /usr/bin/ant の中身を見てみると "-execdebug" というオプションがあることを発見。これをつけて実行してみると、

error: JAVAVER_LIBDIR /usr/share/java-1.6.0 does not exist

こんなメッセージがでてきた。実際に /usr/share/ をみてみると、java-1.4.2/、java-1.5.0/ はあるのに、java-1.6.0/ はない。じゃあ、作ればいいのかな、と思って作って実行してみると、、、

error: JAVAVER_JNIDIR /usr/lib/java-1.6.0 does not exist

さっきのエラーは消えて別の同じようなエラーが発生。こっちも同様にディレクトリを作成してい再実行してみる。すると、、、

成功!

動きました。こんな解決方法で良かったのかどうかは分かりませんが、まあ、当面の作業には問題ないので良しとしよう。。。

世捨て人世捨て人 2017/09/05 22:22 「しかし、この方法は「"Content-Type"ヘッダが"text/html"である正常なレスポンス」があったら使えません。」??何故!?
サーバーがtext/htmlを返してきたのだから、そのままページを表示すればいいのでは!?

2008-05-11

Rails2.0 + Lighttpd + CentOS5の環境構築での問題

| 15:51

Apache + lighttpd で Rails を動かす を参考にして、Railsアプリの実行環境を構築していたところ、僕の環境ではなぜか問題が発生したのでメモ。僕の環境は、以下のとおり。

  • CentOS 5.0
  • Ruby 1.8.5
  • Lighttpd 1.4.19
  • Rails 2.0.2

各アプリのインストールは上記サイトの通りにやって順調に行ってたのだが、いざlighttpdを実行しようとすると、

2008-05-11 15:37:35: (log.c.75) server started
2008-05-11 15:37:35: (mod_fastcgi.c.1029) the fastcgi-backend /var/lighttpd/demo/public/dispatch.fcgi failed to start:
2008-05-11 15:37:35: (mod_fastcgi.c.1033) child exited with status 9 /var/lighttpd/demo/public/dispatch.fcgi
2008-05-11 15:37:35: (mod_fastcgi.c.1036) If you're trying to run PHP as a FastCGI backend, make sure you're using the FastCGI-enabled version.
You can find out if it is the right one by executing 'php -v' and it should display '(cgi-fcgi)' in the output, NOT '(cgi)' NOR '(cli)'.
For more information, check http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI#preparing-php-as-a-fastcgi-programIf this is PHP on Gentoo, add '
fastcgi' to the USE flags.
2008-05-11 15:37:35: (mod_fastcgi.c.1340) [ERROR]: spawning fcgi failed.
2008-05-11 15:37:35: (server.c.908) Configuration of plugins failed. Going down.

こんなエラーを吐いてlighttpdが終了してしまう。ネットで調べてもイマイチ原因がわからない。ならば development モードでやったらどうかと思って、Railsのプロジェクトディレクトリで以下のコマンドをたたく。

  # ruby script/server lighttpd

するとあっさりと動いた。はて???

ということは、Railsで生成したconf/lighttpd.confを使えば良いのか、と思って /etc/lighttpd/lighttpd.conf を置き換えてみると、、、

動いた。

元のlighttpd.confと、Railsで生成したlighttpd.conf との違いは良く分からなかったが(設定内容はだいたい同じはずなのだが)、とりあえずやりたいことは実現できてるので良しとしよう。