1

appfog (rackspace を使用) にワードプレスのインストールをセットアップし、開発用にインストールをローカル マシンに複製しました。ローカルの mysql データベースを作成し、それを指すように wp-config.php を変更したため、(MAMP を使用して) インストールが機能することはわかっています。しかし、コミットのたびに wp-config.php を変更せずに開発したい。いくつかの調査を行った後、Appfog サービス Caldecott を使用して、サーバー上の mysql データベースにトンネリングできるようですaf tunnel。残念ながら、私はそれを機能させることに問題があります。MAMP mysql ポートを 8889 などに変更し、ポート 3306 を介して mysql をトンネリングしても、接続されているように見えますが、localhost Wordpress をロードするときに「データベース接続の確立中にエラーが発生しました」というメッセージが表示されます。mysql モニターを終了したとき (使用してctrl+x, ctrl+c)、「エラー: 'mysql' の実行に失敗しました。$PATH にありますか?」というメッセージが表示されます。元々、いいえ、そうではありませんでしたが、ローカル マシンの PATH 変数を修正したので、ターミナルに移動し、入力するだけmysqlでロードされます。

したがって、私の質問は 2 つの部分であると思います: 1.) ローカル マシンで

の Wordpress 開発に正しいアプローチを使用し ていますか? 2.) もしそうなら、なぜトンネルが機能しないのですか?



4

3 に答える 3

2

これに対処する1つの方法はVCAP_SERVICES、ローカルデータベース設定を使用してローカルシステムの環境変数を模倣することです。これにより、VCAP_SERVICESを参照してdb資格を取得する同じカスタムAppFogwp -config.phpファイルを使用できるようになります。

export VCAP_SERVICES='{"mysql-5.1": [{"credentials": {                      
    "hostname": "localhost",          
    "port": 3306,            
    "password": "root",            
    "name": "LOCAL_DATABASE_NAME",            
    "user": "root"}}]}'

編集:この環境変数を設定した後、MAMPでApacheサーバーを再起動する必要があります。(ありがとうDex)

これにより、開発コードを本番データベースに向ける必要がなくなります。

于 2012-11-08T05:24:03.380 に答える
1

vcap_services が利用可能かどうかをテストするだけです。そうである場合は、1 つの構成を使用します。そうでない場合は、別の構成を使用してください。

これは、私のローカル + appfog 開発 Web サイト構成ファイルの例です。

if(getenv("VCAP_SERVICES")){
    //if in webserver
    $services_json = json_decode(getenv("VCAP_SERVICES"),true);
    $mysql_config = $services_json["mysql-5.1"][0]["credentials"];
    $username = $mysql_config["username"];
    $password = $mysql_config["password"];
    $hostname = $mysql_config["hostname"];
    $port = $mysql_config["port"];
    $db = $mysql_config["name"];

    define("DB_SERVER", "$hostname");
    define("DB_USER", "$username");//enter your database username
    define("DB_PASS", "$password");//databse password
    define("DB_NAME", "$db");//database name
} else {
     //if in local development
     define("DB_SERVER", "localhost");
     define("DB_USER", "website");//enter your database username
     define("DB_PASS", "dfgdfgdf");//databse password
     define("DB_NAME", "fgdf_web");//database name
}

また、.gitignore を使用して af update 機能から一部のファイルを無視するのと同じ方法で .afignore を使用することもできます。適切な構成で一度更新してから afignore を追加すると、二度と更新されません。

于 2013-02-19T16:02:47.580 に答える
0

これは、Tim Santeford の回答に基づいてプロセスを自動化するための、非常に汚いスクリプトです。LOCAL_DATABASE_NAME を必ず変更してください

#!/bin/bash

export VCAP_SERVICES='{"mysql-5.1": [{"credentials": {"hostname": "localhost", "port": 8889, "password": "root", "name": "LOCAL_DATABASE_NAME", "user": "root"}}]}'

/Applications/MAMP/Library/bin/httpd -k stop

sleep 3

/Applications/MAMP/Library/bin/httpd -k start
于 2012-11-24T23:03:07.223 に答える