AWSを使ってシステム構築をしています。
今回、ファイルアップロードをしてデータ登録をする処理をつくったのですが、ある程度大きなファイルをアップロードするとHTTP Status 504のタイムアウトになってしまいました。
※実際のところはファイルのアップロードではなく、アップロードしたファイルの処理に時間がかかっています。
エラーになる場合は、60秒前に504ステータスが返ってきていました。
(504は、Webブラウザからのリクエストを受けたサーバーがされに別のサーバーにリクエストを送信した際に、別のサーバーからの応答が一定時間に返ってこないことを表しています。)
今回のシステムの構成は以下のようになっています。
[Webブラウザ] - [ELB] - [Webサーバ(Apache)]
Webサーバのタイムアウト時間は設定していないのでデフォルトの300秒らしいです。
で、60秒以内で504が返ってくるのはおかいいのでApacheではない。
てことは、504の意味を考えていると、ELBとWebサーバの間でしかないので、ELBの設定を確認したところ、「接続設定 アイドルタイムアウト: 60秒」という設定がありました。
で、これを編集し、Apacheと同じ300秒に変更してファイルアップロード処理をしてみたところ正常動作をしました。
めでたし、めでたし。
まぁ、もともと、このあたりの設定(ELBに限らず)とかは、全然やったことがなかったので新しい知識がついたということで大OKとしたいと思います。
このあたりをちゃんと考えられるプロの人だったら一瞬でわかったり、あらかじめ長めにしたりするんでしょうね。
新潟市で個人でコンピュータ相手にシステム開発をしています。確実、安く、素早くをモットーにやっています。
システム開発の時に調べた技術を惜しみなく公開していきます。あまりよろしくない業者についての苦言も為に吐きます。
コンピュータにベッタリというのもどうかと思いますが、やはりこれからは、コンピュータのことを知らないよりは知っていたほうが良いと思いますよ。
2015年10月4日
2014年4月13日
Apacheとphpでウェブサービス作るときの備忘録
マルチバイト文字(日本語とか)を使ったフォルダを使っているとダメという話です。
Apacheとphpとmysqlを使ってwebシステムを作っているのですが、作っているシステムがどうしても動かなくて悩んでいました。
ふつーは、そのシステムがそもそも動かないんじゃないの?って話になるんですが、違う環境でやると動くのでプログラム的には問題ありません。
環境を軽く書くと以下のとおりです。
結局何が問題だったかというとapacheのDocumentRootに設定していたディレクトリのパスに日本語が含まれていたことです。
この原因でエラーになっているというのに気づくまですごく時間がかかってしまいました。
さらに、時間を喰った原因としてWindowsには、シンボリック・リンクという機能があって、フォルダの別名(ショートカットとは違う)を付ける機能があるのですがそれを使えば解決できるのではないかと考えてその設定をしてしまったことです。
いくらシンボリック・リンクを使っても日本語が含まれるとダメなんですよね(内部的には実際のフォルダ名を使っているんでしょうね。)
なので、apacheで日本語を含むディレクトリでの開発はしないようにしましょう。
なぜこうなったかというとこんな経緯があります。
ごく当たり前の対応だと思います。
ですが、これをするとapacheで使えなくなるので方式を考えました。
develop
src (←ここにソースを入れている)
src (←ここにソースを入れている)
140001_日本語のプロジェクト名
develop (140001_developフォルダをシンボリックリンクでリンク)
Apacheとphpとmysqlを使ってwebシステムを作っているのですが、作っているシステムがどうしても動かなくて悩んでいました。
ふつーは、そのシステムがそもそも動かないんじゃないの?って話になるんですが、違う環境でやると動くのでプログラム的には問題ありません。
環境を軽く書くと以下のとおりです。
最初に動いていた環境
- OS:Windows7
- Webサーバー:IIS
動かなくなっていた環境
- OS:Windows7
- Webサーバー:Apache
動かなくなった環境で実行するとPHPのソースがそのまま表示されたり、「Fatal error: Unknown: Failed opening required…」と表示されたりいろんなことが発生しました。
この原因でエラーになっているというのに気づくまですごく時間がかかってしまいました。
さらに、時間を喰った原因としてWindowsには、シンボリック・リンクという機能があって、フォルダの別名(ショートカットとは違う)を付ける機能があるのですがそれを使えば解決できるのではないかと考えてその設定をしてしまったことです。
いくらシンボリック・リンクを使っても日本語が含まれるとダメなんですよね(内部的には実際のフォルダ名を使っているんでしょうね。)
なので、apacheで日本語を含むディレクトリでの開発はしないようにしましょう。
なぜこうなったかというとこんな経緯があります。
ごく当たり前の対応だと思います。
- プロジェクトのフォルダは日本語名を付けてわかりやすくしたい
- ソースはそのフォルダ内に入れておきたい
ですが、これをするとapacheで使えなくなるので方式を考えました。
旧フォルダ構成
140001_日本語のプロジェクト名develop
src (←ここにソースを入れている)
新フォルダ構成
140001_developsrc (←ここにソースを入れている)
140001_日本語のプロジェクト名
develop (140001_developフォルダをシンボリックリンクでリンク)
src
これでプロジェクトフォルダ一つでまとめて管理ができるようになります。
そもそも2つに分けたんだったらそのままえいんじゃ無いの?ってのもありますが…。
教訓
システム開発時のソースファイルは必ずアルファベットと数字だけのフォルダにすることっ!
登録:
投稿 (Atom)