2016-09-01 10 views
2

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に、これらの変異体の3つ全てが等価である:

{: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を実行しているので、コードで使用されている構文を他の2つのバージョンのいずれかに適応させる必要があります。また、サーバー上のRubyのバージョンを新しいものに更新することもできます。

最後に助言の言葉として、一般的には、本番環境と開発段階で使用されているRubyのバージョンによく一致している必要があります。言語は進化し、機能を追加します。そのようなものは早く捕らえられるべきです。少なくともあなたのサーバが使用するのと同じRubyバージョンでテストを実行してください。

+0

一度噛んだら、二度恥ずかしがり。私はあなたの最後のアドバイスを将来的に実装しようとします。ありがとうございました。 – arunt

4

Ruby 2.3.0であっても、selection = {"All": 0}を入力してください。キーをシンボルと見なします。これはruby 2.1.5では動作しません。文字列をキーにする場合は、キーをシンボルにする場合は{All: 0}を、文字列の場合は{"All" => 0}を使用することをお勧めします。これは両方のバージョンで動作します

+0

確かに、私は将来この新しい種類の定義を避けるつもりです。それは他の開発者に不必要な混乱を引き起こすかもしれません。コメントありがとう。 – arunt

関連する問題