1

コマンドを呼び出すことでジョブを構成するためのYii cronセットアップ手順に従いました(CLI(コンソール)モードでPHPを実行します)。cron ジョブは設計どおりに機能しますが、AR モデルに対処したり、SQL をクエリしたりすると、スクリプト/コマンドが機能しません。

config/cron.phpで DB 接続を設定しました。

...
'components'=>array(
    ...
    'db'=>array(
        'connectionString' => 'mysql:host=localhost;dbname=blogandt_yiiapp',
        //mysql:host=127.0.0.1;port=3306;
        'emulatePrepare' => true,
        'username' => '...',
        'password' => '..',
        'charset' => 'utf8',
        'tablePrefix' => 'yiiapp_', 
        'class'         => 'CDbConnection'   
    ),
 ), 

TestCommand.php:

<?php
class TestCommand extends CConsoleCommand {
    public function run($args) {        
    $dateObj = new DateTime('NOW');  //date("Y-m-d");       
    $fromTime = date_format($dateObj, "Y-m-d H:m:i");
            date_modify($dateObj, '+5 days');   
    $toTime = date_format($dateObj, "Y-m-d H:m:i"); 
    $message = "Time span is from {$fromTime} to {$toTime} ";
    mail('xyz@gmail.com', 'TestCommand run', $message, '');
    
    $criteria = new CDbCriteria;
    $criteria->addBetweenCondition('time', $fromTime, $toTime);  
    $notification = DocEventNotification::model()->findAll($criteria);
            // OR
    //$query = 'SELECT n.UserId, n.EventId FROM yiiapp_doc_event_notification n';
    //$query .= "WHERE (n.time BETWEEN '{$fromTime}' AND '{$toTime}') AND n.turn = '1' ";
    //$rows = Yii::app()->db->createCommand($query)->queryAll();
    mail('xyz@gmail.com', 'TestCommand after DB query', $message, '');
      }
  } ?>

ARを介して、または直接メールが送信されるかどうかにかかわらず、DBに対処しない場合、DBクエリを使用している間は送信されません。コントローラーでこれらの AR クエリを確認しました - 正常に動作します。どうしたの?

編集

実際に$rows = Yii::app()->db->createCommand($query)->queryAll();は、最初のメールを介してクエリを実行すると送信されますが、2 番目のメール (DB クエリの後) は送信されません。

編集2

からスニペットを置きcron.logます。PDO オブジェクトに問題があるようです。

 2013/10/21 23:25:00 [error] [php] include(PDO.php): failed to open stream: No such file or       directory (/home/blogandt/domains/blogandtraffic.com/public_html/framework/YiiBase.php:427)

Yii の構成中に PDO サポートを含めませんでした。解決策は?

4

1 に答える 1

0

連結の問題かもしれません。n の後にスペースがありませんでした

$query = 'SELECT n.UserId, n.EventId FROM yiiapp_doc_event_notification n ';
$query .= "WHERE (n.time BETWEEN '{$fromTime}' AND '{$toTime}') AND n.turn = '1' ";

何が起こるか教えてください。

于 2013-10-22T09:55:21.377 に答える