我遇到了一个我无法解决的问题。我已经设置了自定义 WP cron 计划和具有该计划的 WP cron 事件。我正在使用 PHPStorm 进行调试,并且在 check_mail() Hook 内设置了一个断点。断点永远不会被击中,但是 check_mail() 中的代码被执行,因为我可以在我的日志文件中看到条目(“Got to check_mail()!”)
所有其他断点工作正常,check_mail() 例程中只有两行代码 - 日志写入和返回。
代码运行但我的断点从未命中,这是怎么发生的?
在构造函数中:
add_action( 'check_mail', array($this, 'check_mail' ), 10, 0);
if ( !defined( 'DOING_AJAX' ) || !DOING_AJAX ) {
add_action( 'init', array( $this, 'schedule_wp_cron' ), 10, 0 );
}
支持例程:
public function schedule_wp_cron()
{
/**
* Avoid rescheduling cron if it's already scheduled.
*/
$args = array( );
if ( !wp_next_scheduled( 'check_mail' )) {
/**
* Schedule mail server polling.
*/
wp_schedule_event( time(), 'custom_interval', 'check_mail');
}
}
public function check_mail( )
{
// **BREAKPOINT SET ON NEXT LINE**
write_log( 'emails', 'Got to check_mail()!' );
//... do something ...
return;
}
public function custom_cron_schedule( $schedules )
{
$schedules[ 'custom_interval' ] = array(
'interval' => 300,
'display' => 'Custom Interval',
);
return $schedules;
}
最佳答案
WP Cron 任务通过远程 POST 请求在单独的进程上运行。 PhpStrom 不会在代码中设置的任何断点处停止,因为请求中不存在调试 session 启动参数。
这是解决方案。过滤器将为所有 WP Cron 请求添加额外的参数。将 XDEBUG_SESSION_START 值替换为您的值(我使用默认值)并将代码放在您的插件或主题代码下方。即使是 cron 任务,PhpStorm 也会在任何断点处停止。
add_filter( 'cron_request', 'wp_cron_debug', 10, 2 );
function wp_cron_debug( $args, $doing_cron ) {
$args['url'] = add_query_arg( array(
'XDEBUG_SESSION_START' => 'PHPSTORM' // <== replace PHPSTORM with your key
), $args['url'] );
return $args;
}
PhpStrom IDE key value location
希望对您有所帮助!
关于php - WP cron 事件触发,但未在调试中命中断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047039/
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd
我有一个rubyonrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl
require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d