在生产中获取语法错误但在开发中没有(相同的文件)

时间:2016-09-01 05:02:28

标签: ruby-on-rails ruby

我和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。或者这是别的吗?这是我第一次崩溃网站,这似乎是我绊倒的傻事。

2 个答案:

答案 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}。这适用于两个版本

相关问题