一个多星期以来,我一直在努力为Feed Feed模块中定义的不同Feed创建自定义Elysia cron作业。
我想每天从Feed AAA导入数据,每周从Feed BBB导入一次数据。因此需要在不同的时间表上执行两个(或更多,如果需要)单独的任务。我研究和组合了Elysia cron和Feed Import模块似乎就是答案。
我在Feed Feed模块中创建了两个不同的Feed。当我从Feed Import手动执行它们时,一切正常。当我从Cron运行feed_import_base_cron任务时,它也可以工作,但同时执行两个提要。
当我想为每个Feed定义特定的执行时间时,问题就开始了。我在这里找到了一个建议:https://drupal.stackexchange.com/questions/30819/give-an-individual-cron-task-for-each-feeds-import但是不能让它工作并且不知道我做错了什么,因为php和drupal模块开发不是我的优势。
我在Feed Feed模块(feed_import_base.module)中添加了以上网址的代码。我不是百分之百确定这是否是正确的地方,但它似乎有效,因为我在代码中定义的提要出现在管理UI中的Cron任务中。但是当我尝试执行它们时,会导致错误,这可以在最近的日志消息中看到:
Exception: exception 'Exception' with message 'Download of failed with code -1002.' in
pathToMySite../drupal/sites/all/modules/feeds/plugins/FeedsHTTPFetcher.inc:33 Stack trace: #0
pathToMySite../drupal/sites/all/modules/feeds/plugins/FeedsSyndicationParser.inc(20): FeedsHTTPFetcherResult->getRaw() #1
pathToMySite../drupal/sites/all/modules/feeds/includes/FeedsSource.inc(354): FeedsSyndicationParser->parse(Object(FeedsSource), Object(FeedsHTTPFetcherResult)) #2
pathToMySite../drupal/sites/all/modules/feed_import/feed_import_base/feed_import_base.module(622): FeedsSource->import() #3
[internal function]: feed_import_base_fetch_test_api_feed_raw_cron(Array) #4
pathToMySite../drupal/sites/all/modules/elysia_cron/elysia_cron.module(1090): call_user_func_array('feed_import_bas...', Array) #5
pathToMySite../drupal/sites/all/modules/elysia_cron/elysia_cron.admin.inc(730): elysia_cron_execute('fetch_test_api_...') #6
[internal function]: elysia_cron_execute_page('fetch_test_api_...') #7
pathToMySite../drupal/includes/menu.inc(519): call_user_func_array('elysia_cron_exe...', Array) #8
pathToMySite../drupal/index.php(21): menu_execute_active_handler() #9 {main}
我使用的实际代码是:
function feed_import_base_cronapi($op, $job = NULL) {
$items['fetch_test_api_feed_raw_cron'] = array(
'description' => 'Fetch test API feed RAW',
'rule' => '*/10 * * * *', // Every 10 minutes
'callback' => 'feed_import_base_fetch_test_api_feed_raw_cron' ,
'arguments' => array(array('test_api_feed_raw'))
);
return $items;
}
function feed_import_base_fetch_test_api_feed_raw_cron($feednames){
if (function_exists('feeds_source')){
foreach($feednames as $feedname){
$source = feeds_source($feedname);
$source->import();
}
}
}
我真的不知道自己错过了什么或做错了什么,并开始用尽所需的选项。
答案 0 :(得分:0)
我建议您应该从报告状态页面开始调试。首先导航到' / admin / reports / status'检查cron是否运行以及cron运行时间的页面。然后你应该在Drupal看门狗日志中查看与feed相关的cron运行期间的任何错误。 希望这可以帮助您调试问题。
答案 1 :(得分:0)
在同事的帮助下找到解决方案。如果某人有一天需要它,可以在这里发布。
我在这里错过了一个触发实际Feed导入的回调函数。我认为上面提到的功能是针对Feeds模块而不是Feed Import开发的。因此也没有在这里工作..
触发Feed导入的实际功能来自feed_import_base.module
_feed_import_base_process_feed($feed);