我已经使用共享方法一段时间了,但在某些情况下仍然无法弄清楚它们的行为。
当我调用共享方法时,它会插入这样一个文档:
Meteor.methods({
'method': function(){
Posts.insert({
'timestamp': new Date()
});
}
})
...延迟补偿是否仍然有效,考虑到 Date() 在客户端和服务器上会有所不同,这意味着服务器无论如何都会将自己的版本发送给客户端。如果是,是否有任何解决方法,或者我们是否应该仅在服务器端使用带有时间戳的插入方法?
最佳答案
简短的回答,是的,即使插入日期也可以进行延迟补偿。但是无论在 Minimongo 客户端中插入什么日期,最终都会被服务器覆盖。
这一系列事件看起来像这样:
Date 插入到 Minimongo posts 集合中。假设客户端认为它是 04:31:03 UTC,而实际上它是 04:33:44 UTC。无论如何,现在您有一个带有“不正确”时间戳的文档客户端。这是延迟补偿,这没关系 - 我们不会等待服务器完成插入,我们会立即呈现 UI,即使 UI 不正确也是如此。04:33:44 UTC 的文档插入 Mongo。posts 集合,并且在服务器完成插入后,您的 posts 订阅立即观察到集合的变化并通过 DDP 将文档发送到客户端。 posts 文档与其自己的集合合并。在此过程中,它会用服务器生成的正确时间覆盖不正确的时间。任何相关的 UI 都会被动更新并反射(reflect)此更改。Kyll 建议使用 MeteorPad,所以 here's a very basic example .单击“Click me to test timestamping”字样,您会注意到它下方的毫秒显示闪烁两次:第一次是客户端使用自己的时间戳更新,第二次是服务器返回其时间戳。如果您查看客户端和服务器日志,您会发现这是真的。
有点啰嗦,但希望这对您有所帮助!如果您需要服务器信任并重新使用客户端生成的日期,只需将 Date 对象作为参数传递给您的方法,如
'method': function(date) {
check(date, Date);
Posts.insert({timestamp: date});
}
但是,您通常希望服务器成为时间戳的真实来源。你永远不能相信客户知道现在几点了!
关于mongodb - meteor 延迟补偿和 Date(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562227/
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述
date_select方法只能设置:start_year,但我想设置开始日期(例如3个月前的日期)(但没有这样的选项)。那么,我可以将开始日期设置为date_select方法吗?或者,要制作这样的选择框,我应该使用select_tag和options_for_select吗?或者,有什么解决办法吗?谢谢, 最佳答案 有可能……例如:start_year–设置年份选择的开始年份。默认为Time.now.year-5参见thisresource. 关于ruby-Rails3-我可以将开始日期
我正在运行这样的代码:ifvalid_from>Date.today当我运行它时,我得到一个错误提示comparisonofDatewithnilfailed我假设它正在发生,因为在某些情况下valid_from是nil。有没有办法避免出现此错误? 最佳答案 你可以这样做:ifvalid_fromandvalid_from>Date.today...end这将在第一个子句上短路,因为valid_from为nil,因此为false。 关于ruby-Date与nil的比较失败-ruby,我们
我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs:
如何在Ruby中扩展date_select的范围??它只显示2005年,我想用它作为出生日期。 最佳答案 您可以使用:start_year选项,参见thedocumentation. 关于ruby-on-rails-date_selectruby,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2047739/
ruby1.9.3dev(2011-09-23修订版33323)[i686-linux]轨道3.0.20最近为什么在与DateTimeonRails相关的RSpecs项目上工作我发现在给定日期以下语句发出的值date.end_of_day.to_datetime和date.to_datetime.end_of_day虽然它们表示相同的日期时间,但比较时返回false。为了确认这一点,我打开了Rails控制台并尝试了以下操作1.9.3dev:053>monday=Time.now.monday=>2013-02-2500:00:00+05301.9.3dev:054>monday.cla
我知道这是个坏主意,但我有很多遗留代码,我想运行一些历史批处理作业。我不想更改系统日期,因为其他东西在同一系统上运行。有什么方法可以更改Date.today仅在给定进程的生命周期内返回的值。这里的想法是倒带并运行一些用于处理Date.today的旧批处理脚本。谢谢乔尔 最佳答案 您可以像Nikolaus向您展示的那样对Ruby进行猴子补丁,也可以使用TimeCopgem。它旨在使编写测试更容易,但您也可以在普通代码中使用它。#Setthetimewhereyouwanttogo.t=Time.local(2008,9,1,10,5,
我想创建Date的子类。一个正常的、健康的、年轻的rubyist,没有被Date的实现的特殊性所伤害,会以下面的方式来解决这个问题:require'date'classMyDate然后继续以最预期的方式使用它......require'my_date'mdt=MyDate.new(2012,1,28)putsmdt.to_s...只是因为Date::new方法实际上是Date::civil的别名,它永远不会调用初始化。在这种情况下,最后一段代码打印“2012-01-28”而不是预期的“2012-12-25”。亲爱的Ruby社区,这是什么鬼?new别名是否有一些很好的理由,以便它忽略
我正在ActiveRecord中编写一个自定义验证器,以便截止日期有意义:validate:deadline_is_possible?defdeadline_is_possible?ifdeadline>begins_aterrors.add(:deadline,'mustbepossible')endend然而,这会生成一个“NoMethodError:未定义的方法`>'fornil:NilClass”。我尝试将日期转换为字符串,例如:defdeadline_is_possible?ifdeadline.to_s>begins_at.to_serrors.add(:deadline,