1

导轨 4.0.3。我有一个带有日期字段的表格。换句话说,它只在我只使用 date_select 时才有效。这在我的开发机器上完美运行。当我将它部署到生产环境时,表单拒绝提交并在到达日期时抛出 NoMethodError,抱怨缺少 utc 方法。我无法追踪它,因为生产服务器的日志告诉我的不止是它失败的那一行,但那一行是 Model.new(params[:form]) 行,而失败发生在类型转换魔法期间。

该字段目前是一个文本字段,其值由 jQuery UI datepicker 提供,但是当它是一个普通的 Rails formhelper date_field 时也存在这个问题。一旦它到达日期,它就会失败......但它在开发中完美运行,我正在使用 Git 部署到生产环境,所以我知道我们在同一页面上。

在本地,我使用 jRuby 并使用 Neo4j.rb 2.3 作为我的数据库。我通过运行生产应用程序服务器 Torquebox 来模仿开发环境,它仍然是本地的,远程失败。我在两个位置都运行相同版本的 jRuby,并且我将所有 gem 锁定到特定版本,以排除一些奇怪的特定于版本的错误。任何想法都非常感谢!

4

2 回答 2

1

试试这个代码,看看它是否有效: -

date_string = "#{review_params['date(1i)']}-#{review_params['date(2i)']}-#{review_params['date(3i)']}"
@concert = Concert.find_or_create_by!(artist: review_params[:artist], venue: review_params[:venue], date: date_string)
于 2014-04-20T05:18:10.967 回答
1

我在单击提交按钮时就意识到了解决方案,但想记录下来以防其他人遇到此问题。这实际上是 neo4j-wrapper gem 中的一个错误......两个月前合并了一个拉取请求......我写的。我忘记了。我猜我的本地 gemset 仍然缓存了我修改后的 gem 版本,但服务器只是使用最新版本,这是在我的修改开始之前完成的。

此错误位于 type_converters.rb 中。Neo4j 将所有时间和日期作为整数保存到数据库中,因此它需要转换提交的任何内容。原始代码检查了要转换的对象的类型。如果是日期,则将其转换为时间,然后运行 ​​utc;否则,它只是运行UTC。这显然对字符串没有好处,所以我的修复首先运行 Time.parse(s)。

因此,如果其他人遇到此问题并使用 Neo4j.rb 2.3,请将此行添加到您的 gemfile

gem 'neo4j-wrapper', git: 'https://github.com/andreasronge/neo4j-wrapper', ref: '00e5665ead'
于 2014-04-20T17:26:23.337 回答