我和Meld一起检查过 - 文件完全相同。以下代码在我的本地计算机上正常工作,但我的生产服务器因此而失败:
- selections = {"All": 0, "Last 30 days": 30, "Last 15 days": 15, "Last 7 days": 7,"Last 24 hours": 1}
将"All" : 0
更改为"All" => 0
等修复了它。
我的猜测是,这是因为我的Ruby version
是2.3.0,而在生产服务器上它是2.1.5。或者这是别的吗?这是我第一次崩溃网站,这似乎是我绊倒的傻事。
答案 0 :(得分:6)
你正在那里定义Ruby哈希。在Ruby 2.2及更高版本中,所有这三种变体都是等价的:
{:a => "hello", :b => "World"} # allowed since always
{a: "hello", b: "World"} # allowed since Ruby 1.9
{"a": "hello", "b": "World"} # Allowed since Ruby 2.2
然而,最后一个示例中使用的语法仅在Ruby 2.2中添加。由于您在服务器上运行旧版本的Ruby,因此必须将代码中使用的语法调整为其他两种变体之一。或者,您可以将服务器上的Ruby版本更新为更新版本。
最后作为建议的一句话:您通常应该与生产中和开发期间使用的Ruby版本紧密匹配。语言不断发展并增加了功能。这样的事情应该尽早发现。至少在服务器使用的相同Ruby版本上运行测试。
答案 1 :(得分:4)
在Ruby 2.3.0中,即使您提供selection = {"All": 0}
。它会将键视为符号。这在ruby 2.1.5中不起作用。因此,如果您希望键为符号,则使用{All: 0}
;如果键入为字符串,则使用{"All" => 0}
。这适用于两个版本