2017-02-15 36 views
0

Я написал задачу планировщика. Его работа над моей махинацией. К сожалению, он не работает на моей удаленной машине.TYPO3 Scheduler ничего не делает

Эта машина является бесплатной версией php7.0 php-fpm. хрон выглядит следующим образом:

**[email protected] 
@weekly /usr/local/bin/letsencrypt.sh -c 
* * * * * php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler 
#* * * * * php -r 'echo function_exists("foo") ? "yes" : "no";' 

последний кронтаб выполняется (если я комментирую его) и выходной почта, отправленная мне.

Если я заменю «планировщик» чем-то странным, я также получаю почту с выходом, который содержит допустимые параметры, которые я должен выбрать. Так что для меня это означает, что cron запущен, и cli_dispatch.phpsh вызывается правильно.

В TYPO3 Backend планировщик говорит, что конфигурация в порядке. Я могу вручную запустить cron и выполнить его работу.

Итак, что еще может быть причина ...?

EDIT

я понял, что причина в том, что TYPO3 планировщик не запрашивал нужную базу данных. У меня есть файл AdditionalConfiguration, в котором имя базы данных в $ GLOBALS ['TYPO3_CONF_VARS'] ['DB'] ['database'] изменено на основе переменной $ _SERVER ['SERVER_NAME']. Но в Scheduler эта переменная пуста. Поэтому мне пришлось удалить файл AdditionalConfiguration, и все работает как можно скорее.

Вопрос в том, как я могу достичь Планировщика, получающего правильную базу данных на основе Servername?

ответ

0

Для других более полного ответа:

В .htaccess установить контекст приложений вашего сайта на основе на имя хоста youtr.

Пример:

# Rules to set ApplicationContext based on hostname 
RewriteCond %{HTTP_HOST} ^dev\.example\.de$ 
RewriteRule .? - [E=TYPO3_CONTEXT:Development] 
RewriteCond %{HTTP_HOST} ^alpha\.example\.de$ 
RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging] 
RewriteCond %{HTTP_HOST} ^www\.example\.de$ 
RewriteRule .? - [E=TYPO3_CONTEXT:Production] 

В вашем AdditionalConfiguration.php установке БД на основе этого контекста. Пример:

if (\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()->isDevelopment()) { 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo376_dev'; 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo376_dev_usr'; 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'somepw'; 
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['clearCacheSystem'] = '1'; 
} elseif (\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext() == 'Production/Staging') { 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo376_alpha'; 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo376_alpha_usr'; 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'someotherpw'; 
} else if(\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext() == 'Production') { 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'typo376'; 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'typo376_usr'; 
    $GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'someotherpw'; 

}

В вкладке хрон (редактировать его с кронтаб -е на командной строке) вы установите переменную Envroiment перед вызовом cliscript.

Пример:

* * * * * TYPO3_CONTEXT=Production/Staging php /var/www/alpha/beta/gamma/typo3/cli_dispatch.phpsh scheduler 
+1

Просто важная сторона примечания: Контекстное тестирование должно использоваться только для тестирования, означает единичные тесты, функциональные тесты. используйте подконтекст разработки или производства, таких как Production/Testing для такой среды, как QS! –

+0

Конечно, это правильно. Отредактировал мой ответ – Falk

1

Вместо проверки переменного сервера лучше использовать контекст приложения, который также может быть установлен при вызове планировщика

+0

Danke. Das ist perfekt. – Falk

 Смежные вопросы

  • Нет связанных вопросов^_^