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 を DB として使用しています。実稼働アプリ サーバーである Torquebox を実行することで開発環境を模倣しましたが、それでもローカルであり、リモートで失敗します。私は両方の場所で同じバージョンの jRuby を実行しており、すべての gem を特定のバージョンにロックして、バージョン固有の奇妙なバグを排除しています。どんな考えでも大歓迎です!

4

2 に答える 2

1

送信ボタンをクリックするとすぐに解決策に気づきましたが、他の誰かがこの問題を抱えている場合に備えて、これを文書化したいと思いました. これは実際には neo4j-wrapper gem のバグです... 2 か月前にマージされたプル リクエストがありました... 私が書いたものです。そして、私はそれを忘れていました。私のローカルの gemset にはまだ変更したバージョンの gem がキャッシュされていたと思いますが、サーバーは私の変更が入る前に行われた最新のリリースを使用していました。

このバグは type_converters.rb にあります。Neo4j はすべての時刻と日付を整数として DB に保存するため、送信されたものを変換する必要があります。元のコードでは、変換するオブジェクトの型をチェックしていました。日付の場合は、時刻に変換してから 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 に答える