2

コンテキストインスタンスの作成を伴う symfony タスクがあります:

sfContext::createInstance($this->configuration);

get_component(電子メールの本文を生成するために) ヘルパー関数を呼び出すため、コンテキストが必要です。sfContext::getInstance() が悪いことはわかっていますが、書いていないので削除できません。

私の問題は、この行がルーティングのログをトリガーすることです-関連メッセージ:

  >> sfPatternRouting Match route "homepage" (/) for / with parameters array (  'module' => 'default',  'action' => 'index',)

どうすれば sfRouting をシャットダウンできますか? この役に立たない情報を繰り返すメールが crontab から届き続けています。

ルーティング コンストラクターに渡されるオプションに が含まれないように構成を変更するにはどうすればよい"logging" => "true"ですか?

factory.yml ファイルに何が含まれていても、ルーティングをシャットダウンしたいと思います。

もちろん、STDOUT または STDERR に記録されたエラーが発生した場合でも、電子メールを取得したいと考えています。

Vlad からコードを求められたので、小さなプロジェクトを作成して、バグを簡単に再現できるようにしました。ここにあります:https://github.com/greg0ire/pwet

バグを簡単に再現したい場合は、複製できる新しいダミー プロジェクトを作成しました。バグを再現する手順は次のとおりです。

git clone git://github.com/greg0ire/pwet.git
cd pwet
git submodule init
git submodule update
php web/frontend_dev.php
./symfony pwet --application="frontend"

php web/frontend_dev.phpどのように重要であるかに注意してください。CLI と同じキャッシュ ファイルは生成されません。

4

3 に答える 3

2

「タスク」と呼ばれる新しい環境を作成し、「ルーティング」クラスを「DummyRouting」と呼ばれる新しいクラスに構成することで、これを達成することができました。

アプリ/フロントエンド/config/factories.yml:

task:
  routing:
     class: DummyRouting

DummyRouting.class.php

class DummyRouting extends sfPatternRouting
{
  public function connect($name, $route)
  {
  }

  public function parse($url)
  {
    return false;
  }
}

もちろん、便宜上、「タスク」環境をデフォルトとして指定してください。

configure() の YourTask.class.php

...
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'task'),
...
于 2013-05-30T16:22:04.450 に答える
0

これは、デバッグをオンにしている場合にのみ発生します(デフォルトでは開発環境)

環境のデフォルト値は、タスクの configure メソッドで定義されます (前のメッセージの行のようなものです)。--env=dev/prod/stage/etcタスクの実行時に、コマンド ラインで引数を使用してオーバーライドできます。おそらく本番環境 (prod) に切り替えて、ルート関連のメッセージ (またはその他のデバッグ メッセージ) が表示されないようにする必要があります。これは私のタスクの 1 つの例です。

protected function configure()
{
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'prod'), 
      new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
    ));

   // other stuff here      
}
于 2012-12-06T14:18:29.703 に答える
-1

loggingに設定できる唯一の方法は、次falseのように手動で行うことfactories.ymlです。

prod:
  routing:
    param:
      logging: false

このソリューションを使用すると、私のタスクは静かになりました!

于 2014-03-29T16:47:02.920 に答える