2012-09-19 9 views
6

私はSilexを使用しているプロジェクトに取り組んでいます。特定のファイルでは、useステートメントを追加して、オートローダーに特定のPHPファイルを含めるようにしました。ファイルの後半で、私はそのクラスを使用します。すべては開発サーバー上でうまくいきますが、プロダクションに移行するとFatal error: Class not foundというメッセージが表示されます。編集:両方のサーバは現在、PHP 5.4.4を使用しています。クラスはプロダクションサーバでのみエラーが見つかりません

この問題を引き起こしているインストールに関する特定の問題はありますか?私は、作曲家によって生成された両方の名前空間自動ロードファイルが同じであることを確認できます。

だけ徹底のために、ここに含まれる文は次のとおりです。ここで

use Instaphp; 

は、クラスの使用は、後のコードである:ここで

$app['instaphp'] = $app->share(function() use ($app) { 
      if($app['tagframe.instagram_token'] === null) { 
       return Instaphp\Instaphp::Instance(); 
      } else { 
       return Instaphp\Instaphp::Instance($app['tagframe.instagram_token']); 
      } 
     }); 

     $app['instaphp.config'] = $app->share(function() use ($app) { 
      return Instaphp\Config::Instance(); 
     }); 

は、正確なエラーです:

Fatal error: Class 'Instaphp\Config' not found in /var/www/silexsandbox/src/TagFrame/Silex/TagFrameServiceProvider.php on line 89 

更新:私は、このようなエラーは他の場所で経験していないことを追加する必要があります。私は作業しているので、すべての名前空間が動作しないほど単純ではないことが分かっています。

+0

よく聞こえるかもしれませんが、プロダクションサーバーにベンダーをインストール(または最新の変更後に更新)してもよろしいですか? – Maerlyn

+0

PHP-FPMを実行していますか?おそらくAPCが有効になっていますか?あなたはFPM労働者をリロードすることができますか? – igorw

答えて

5

デフォルトでは、MacではJournaled Case-Insensitive Filesystemが使用されます。 Linuxは、あなたの好みに応じて、大部分は大文字と小文字を区別します。これは間違いなく上で説明した動作につながります。

Macで2番目のパーティションを作成し、それを本番環境に近いものにするためにジャーナルの大文字と小文字を区別してフォーマットすることをお勧めします。

+1

実際にosxの大文字と小文字を区別するモードで別のパーティションをフォーマットすることはできますが、いくつかのアプリケーションが失敗するため、osパーティションでは推奨されていないようです。例:Photoshop https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.htmlおそらくこの考え方のような他のパーティションを持つのは大丈夫です:) – GabLeRoux

4

コメントありがとうございます。私は、オートローダがダンプされるようにComposerを使用して更新したことを確認しました。

問題(私が時間をかけて調べたところ)は、私が使用していたサードパーティ製ライブラリ(Instaphp)のディレクトリ構造が小文字であることでした。これで私のMacには問題はありませんでしたが、実動サーバーではUbuntuが稼動しています。Macはそうではない大文字と小文字を区別するファイル処理ユーティリティを使用しています。

私はこれに夜を過ごすために完全に自分自身を蹴っています!

関連する問題