我想配置我的 Rails 4.2.5 应用程序以使用其运行系统的时区(例如 Time.current 与 Time.now 相同),而不必将其硬编码到配置中。
这是为了与我受聘之前创建的现有遗留基础设施兼容。我完全了解默认使用 UTC 的最佳实践,有一天我们将重写所有代码以使用 UTC 作为默认值,但这不是今天的选择。由于现有代码和应用程序使用服务器的非 UTC 时区作为默认时区,因此违反该约定将破坏我们现有的代码。
这是一个专有应用程序,运行在使用 Chef 自动部署的云实例上;单个实例不是手动管理的。因此,操作系统配置是应用程序环境配置,并且在所有实例中都是一致的。此外,一切都只在 Linux 上运行,因此可移植性不是问题。
文档说,如果设置了 Time.zone 或 config.time_zone,Time.current 将返回 Time.now。我在 application.rb 中未设置 config.time_zone ,但默认情况下它仍然以某种方式设置为“UTC”。如何防止这种情况发生,以便 Rails 仅使用操作系统的时区设置?
最佳答案
我建议对config.time_zone
使用UTC
,并根据登录用户的时区调整每个请求。
您可能对我撰写的关于 Rails 时区的博客文章感兴趣? 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
,这会导致以后出现严重的问题
关于ruby-on-rails - 如何让 Rails 默认使用系统时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34210623/