Webアプリの大規模改修について


現在、PHP+MySQLで自作したネットショップを運営しております。
この度、(規模が大きくなりそうな)システムの改修が必要になりました。
今までは全てのアクセスに503を返し、その間に作業をしておりました。
今回は時間がかかる&ネットショップをストップしたくないので、
どのように動かしながら作業をすればよいか知恵をお貸しください。

現在、/home/***.com/a/以下をルートとしています。(***.comにアクセスすると/home/***.com/a/index.phpが表示される)
そのため、全て/b/にファイルを移し、作業が完了したら/a/に上書きすればいいのではと思いましたが、PHP、.htaccessファイル内、その他から絶対パスで別ファイルを読み込んでいる箇所が多く、非常に手間です。

/b/以下からのアクセスはrequire('/home/***.com/a/~')となっていても全て/b/にリダイレクトする方法があればよいのではと思います。
そのような方法はありますか?また動かしながらメンテナンスしたいといった場合は通常どのようにするものなのでしょうか?

以上よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/12 15:02:51
  • 終了:2013/03/19 15:05:04

回答(2件)

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472013/03/12 16:34:44

ポイント150pt

何をどこまで改修するのか、にもよるのですが、ぱっと思いつくのはバーチャルホストかなぁ。

例えば、既存が www.example.com だったとして、改修後のコンテンツを new.example.com でアクセスできるようにしておく。

で、new.example.com で正常に動くのを確認したら、www.example.com が改修後のコンテンツを指すように変更する。

確認作業に使う端末側の hosts ファイル(UNIX 系 OS なら /etc/hosts、Windows なら C:\Windows\System32\drivers\etc\hosts)に、new.example.com の行を書けば、外からアクセスする人は、new.example.com では通常はアクセスできないので、作業中のコンテンツにアクセスしてしまうことは無い。

あと、MySQL 側がどうか? というのはあります。例えば、データベースのテーブル構造に変更があるような場合、どうしても、停止時間を設ける必要があるかもしれません。DB 変更用の SQL 文を予め用意して、止めている間にその SQL 文を実効して、バーチャルホストを変更して、という感じかなぁ。

その停止時間も嫌なら、旧 PHP プログラムで問題が発生しなような DB、プログラムの設計をして、DB を先にアップグレードして「旧プログラム」-「新 DB」の状態を作ってからコンテンツの修正、といった感じになると思います。

id:oil999 No.2

oil999回答回数1728ベストアンサー獲得回数3202013/03/12 20:22:10

ポイント150pt

/b/以下からのアクセスはrequire('/home/***.com/a/~')となっていても全て/b/にリダイレクトする方法があればよいのではと思います。

httpサーバにApacheをご利用なら、mod_rewriteを使ってリダイレクトするか、そもそもmod_aliasで指し示す物理パスを変更してしまえば実現可能です。

しかし、この方法はおすすめしません。
なぜなら /b/ は開発環境であり、それを丸ごと公開するというのはリスクが大きすぎます。

せっかく大規模改修するのでしたら、リンクは相対パスにして、本番環境と開発環境は共存できるようにすることをお勧めします。

サイトのメンテナンスは、以下の手順で行うことが多いです。

  1. 本番環境と開発環境を分ける。
  2. 開発環境で十分なテストを行う。
  3. 本番環境を停止する。(代理サーバを立てることが望ましいが、それが難しいならmod_aliasですべてのアクセスをメンテナンス中ページにアクセスするようにさせる)
  4. 開発環境を本番環境へコピーする。
  5. 本番環境を再開する。
  • id:taknt
    動かしながらメンテできるものもあれば できないものもあります。

    それは メンテする内容によって違うものですが、基本的には システムをとめて メンテするのが普通でしょう。

    その場合、アクセスしたら メンテ中だと表示すればいいかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません