我想配置我的Rails 4.2.5应用程序以使用它运行的系统的时区(例如Time.current与Time.now相同),而不必将其硬编码到配置中
这是为了与我之前创建的现有旧版基础架构兼容。我完全了解默认情况下使用UTC的最佳做法,有一天我们会重写所有代码以使用UTC作为默认值,但今天这不是一个选项。由于现有代码和应用程序使用服务器的非UTC时区作为默认值,因此违反该约定将破坏我们现有的代码。
这是一个专有应用程序,可在使用厨师自动部署的云实例上运行;单个实例不手动管理。因此,OS config 是应用程序环境配置,并且在所有实例中都是一致的。此外,一切都只在Linux上运行,因此可移植性不是问题。
文档说如果设置了Time.zone或config.time_zone,Time.current将返回Time.now。我在application.rb中没有设置config.time_zone,但它仍然以某种方式设置为" UTC"默认情况下。如何防止这种情况,以便Rails只使用操作系统的时区设置?
答案 0 :(得分:2)
我建议UTC
使用config.time_zone
并根据登录的用户时区调整每个请求。
您可能对我在rails timezones上发表的博客文章感兴趣吗? http://jessehouse.com/blog/2013/11/15/working-with-timezones-and-ruby-on-rails/
如果您真的想将config.time_zone设置为不同的应用程序值 (不推荐),您可以将其设置为环境变量并设置您的主厨脚本在配置服务器期间的环境变量
config.time_zone = ENV['LOCAL_TIME_ZONE'] || 'UTC'`
无论你做什么:不要将config.active_record.default_timezone
设置为:local
这会导致严重的头痛问题
答案 1 :(得分:1)
如果没有我想要的配置的本机Rails选项,我选择使用以下内容:
config.time_zone = File.read('/etc/timezone').strip
它不是很漂亮,但由于我们的服务器配置受到严格控制,它现在可以使用。