9

私はphpWebアプリケーションを作成しており、FTP経由でそれらをデプロイするだけです。それを機能させるために、私をホストしている(無料の)Webサーバーをほとんど制御できないため、調整やデバッグを行うことがよくあります。そのため、ローカル環境で機能しているものがライブで機能しない可能性があります。

たとえば、class_db_myapp.phpを含む別のphpファイルを保持します。このファイルは、class_db.phpを特定のDBパラメーター(db名、ユーザー名、パスワード)で拡張します。これらは、ローカルとライブでは同じではありません。(情報:最近、バージョン管理にgitを使い始めました)

私のアプリが進化するにつれて、いくつかのファイルの名前が変更/削除/作成されます。新しいバージョンをアップロードするときが来たら、私は自分の記憶に頼って何をアップロード/削除する必要があるかを知るか、単にすべてを削除/すべてアップロードする必要があります。しかし、2番目のケースでは、class_db_myapp.phpファイルを消去しないようにする必要があります...

私はこれに対する適切な解決策を思い付いていません。

このドメインのベストプラクティスは何ですか?

私はこの主題に関する既存の議論を見逃したかもしれません、もしそうなら私にそれを指摘してください。

ありがとうございました。

4

7 に答える 7

6

ftp サーバーがシンボリック リンクをサポートしている場合は、次の手法を使用できます。

  1. public_html フォルダーを、現在のバージョンを含むフォルダーへのシンボリック リンクにします。(例: "version1")
  2. 新しいバージョンを新しいフォルダーにアップロードします。
  3. アップロードが完了したら、新しいバージョンがアクティブになるようにシンボリック リンクを変更します。

何か問題が発生した場合は、シンボリック リンクを再度変更することで簡単に以前のバージョンに戻すことができます。

ライブ環境で異なるデータベースおよびその他の設定については、いくつかのオプションがあります。

  • 環境を含むファイルを作成します: "live" または "local" で、環境設定に基づいてコードに "if ステートメント" を入れます。
  • PHPで環境を検出できる場合は、ファイルの代わりにそれを使用してください。
  • すべての設定を「versionX」フォルダーの外にあるファイルに配置します。
于 2009-02-15T18:59:47.923 に答える
2

ファイルの移動

あなたはrsync、またはrsyncのようなものを探しています。Rsyncは、あるファイルセットを別のファイルセットと同期できるようにするプログラム/システムです。過度に単純化すると、ソースコードと本番コードを介して見える可能性があり、異なるファイルのみをアップロードします。

rsync -av --cvs-exclude /soure/dir user@example.com:./source/dir    

--cvs-excludeフラグは、少し誤解を招くような名前が付けられています。.cvsディレクトリだけでなく、rcsプログラムcvsが無視するファイルをrsyncに無視させます。を実行すると、フラグに関する詳細情報を取得できます

rsync --help

アプリケーションをホストしているサーバーはrsyncデーモンを実行している必要がありますが、それは最近のコースと同等です。

本当に賢くしたい場合は、SSHキーを使用してrsyncを構成でき、パスワードを入力する必要もありません。ただし、これは必ずしも必要ではありません。

さまざまな構成情報

ローカルサーバーとライブサーバーの間で異なる構成情報を1つのファイル、または1つのファイルセットに分けます。これらのファイルをFTP経由でライブサーバーに転送し、-excludeオプションを使用して、これらのファイルを無視するようにrsyncに指示できます。

于 2009-02-15T22:19:31.313 に答える
2

1)「開発サーバーとライブサーバーの構成が異なる」問題を解決するために、これを使用します:

// Change 'localhost' to your dev server's address
define('IS_LIVE', 'localhost' != $_SERVER['HTTP_HOST']);

// Database configuration
$db_cfg = IS_LIVE?
  array(...): // Live server config
  array(...); // Dev server config

2) 開発ファイルとライブ ファイルの同期を保つために、Beyond Compareを使用します。これは、(S)FTP 経由でリモート ディレクトリを含むディレクトリ全体を比較できるビジュアル diff ツールです。

左のウィンドウに開発サーバー上のファイルが表示され、右のウィンドウにライブサーバー上のファイルが表示されるようにプロファイルを設定しました。このようにして、サーバー間にどのような違いがあるか (ファイルの変更、欠落、または追加) を確認でき、ディレクトリ全体、ファイル、またはそれらの間のファイルの特定の行を簡単にコピーできます。非常に便利。

また、ユーザーが生成したファイルやログを含むディレクトリなど、同期したくない特定のディレクトリを「無視」することもできます。

于 2009-02-15T19:11:26.710 に答える
1

phingantなどのビルドツールは、あなたが探していることを実行できるはずです。少しのスクリプトで、アプリケーション構成を取得し、単一のコマンドでアプリケーションをアップロードするために現在実行している手順を自動化できるはずです。

于 2009-12-24T18:10:01.703 に答える
1

理想的かどうかはわかりませんが、たとえば、DB ログイン構成内で、コードが実行されているホストを検出します (以下の部分的な抜粋)。

$active_group = "default";
if($_SERVER['SERVER_NAME'] == 'argent.local' || 
   $_SERVER['SERVER_NAME'] == 'beta.website.com') 
   $active_group = "development";

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "username";
$db['default']['password'] = "password";
$db['default']['database'] = "dbname";
$db['default']['dbdriver'] = "mysql";

$db['development']['hostname'] = "localhost";
$db['development']['username'] = "username_dev";
$db['development']['password'] = "password_dev";
$db['development']['database'] = "dbname_dev";
$db['development']['dbdriver'] = "mysql";

(argent.local は私のローカル dev ボックスです) サーバーがプロダクションかローカル dev かによって、PHP エラー出力を有効/無効にするメインクラスのように、他のいくつかの場所でもこれを行います (エラー出力は、 dev、しかし、私はそれが本番環境で出力されることを望んでいません):

if($_SERVER['SERVER_NAME'] == 'argent.local' || 
   $_SERVER['SERVER_NAME'] == 'beta.website.com') 
    error_reporting(E_ALL);
    else error_reporting(0);

このようにして、SVN にチェックインするコードは、ライブ ボックスと開発ボックスの両方で機能し、どこにデプロイするかを追跡する必要がありません。このようにして、既存のファイルをすべて消去し、ファイルを移動することを心配することなく、新しく再デプロイすることができます。

于 2009-02-15T19:11:11.063 に答える
1

ssh アクセスがないため、ローカル マシンですべてをテストしてコミットします。次に、ftp クライアントfilezillaのディレクトリ比較機能を使用して、どのファイルが変更されたかを確認できます。何も覚える必要はありません。

を使用してサーバーにプッシュすることをお勧めしますgit push。ただし、オプションが限られているため、上記のソリューションで問題ありません。

于 2009-02-15T19:39:44.020 に答える