Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails,延迟的任务将不正确的日期时间序列化为GMT_Ruby On Rails_Ruby_Ruby On Rails 3_Serialization_Delayed Job - Fatal编程技术网

Ruby on rails Ruby on Rails,延迟的任务将不正确的日期时间序列化为GMT

Ruby on rails Ruby on Rails,延迟的任务将不正确的日期时间序列化为GMT,ruby-on-rails,ruby,ruby-on-rails-3,serialization,delayed-job,Ruby On Rails,Ruby,Ruby On Rails 3,Serialization,Delayed Job,我有一些代码,当它被序列化并使用延迟的_作业运行时,似乎执行不正确。为了解决这些问题,我正在运行Ubuntu11.04、Ruby1.8.7和Rails3.0.4 我的一个表中有一个datetime字段,它显然存储了特定事件的日期和时间。在我的RoR应用程序中,我通过调用strftime的应用程序使用此字段,以不同的方式对其进行格式化。此格式的输出在网页上是正确的 我还使用delayed_job将同一字段放入发送的电子邮件中(通过某些操作触发)。当电子邮件到达时,它似乎以某种方式被格式化为GMT。

我有一些代码,当它被序列化并使用延迟的_作业运行时,似乎执行不正确。为了解决这些问题,我正在运行Ubuntu11.04、Ruby1.8.7和Rails3.0.4

我的一个表中有一个datetime字段,它显然存储了特定事件的日期和时间。在我的RoR应用程序中,我通过调用strftime的应用程序使用此字段,以不同的方式对其进行格式化。此格式的输出在网页上是正确的

我还使用delayed_job将同一字段放入发送的电子邮件中(通过某些操作触发)。当电子邮件到达时,它似乎以某种方式被格式化为GMT。例如,如果数据库中的日期时间应为2011年12月11日15:30:00(下午3:30),则电子邮件将显示为2011年12月11日22:30:00(晚上10:30)

我查看了数据库,发现了一些有趣的东西:

  • 数据库中的日期时间是
    2011-11-12 22:30:00
  • 该应用程序在通过网络显示时,将数据正确格式化为2011年12月11日下午3:30
  • 该电子邮件将数据正确格式化为2011年12月11日晚上10:30
  • 当我运行一个简单打印日期和时间的小ruby文件时

    现在是时间

我得到了正确的输出(本地,非GMT时间)

当我查看delayed_jobs表的序列化yaml中的内容时,我可以看到date字段的格式为

2011-11-12 22:30:00 Z
在我的application.rb中,我有

config.time_zone = 'Mountain Time (US & Canada)'
timezone = "Mountain Time (US & Canada)"
在我的环境中,我有

config.time_zone = 'Mountain Time (US & Canada)'
timezone = "Mountain Time (US & Canada)"

有人能帮我弄清楚这是怎么回事吗?我对RoR比较陌生,所以这可能是一个非常明显、简单的问题。如果你需要更多的调试信息,请让我知道,我可以发布它。同样,如果我的问题不清楚,我可以尝试clar

您可能需要在数据库中设置时区。如果是MySQL,请参阅:

您可能需要在数据库中设置时区。如果是MySQL,请参阅:

尝试在序列化之前将日期对象更改为字符串。

尝试在序列化之前将日期对象更改为字符串。

在我的例子中,我解决了在视图中显式指定时区中的方法

示例:
@my\u obj.在时区中创建


我知道它并不优雅,但到目前为止,我还没有找到更好的解决方案。

在我的例子中,我解决了在视图中明确指定时区中的方法

示例:
@my\u obj.在时区中创建


我知道它并不优雅,但到目前为止,我还没有找到更好的解决方案。

James-看来MySQL的时区设置是正确的。我运行了一个
select now()并返回适合我时区(山区)的日期和时间。有没有其他的方法来检查它,我需要尝试吗?那么MySQL设置正确了。一定是出了什么问题,不确定是什么。詹姆斯-看来MySQL的时区设置正确。我运行了一个
select now()并返回适合我时区(山区)的日期和时间。有没有其他的方法来检查它,我需要尝试吗?那么MySQL设置正确了。一定是出了什么事,不知道是什么。延迟的工作不知道任何关于时区的信息,在非工业化后会使用GMT。延迟的工作不会知道任何关于时区的信息,在非序列化后会使用GMT。