В Ruby 1.8.7, почему синтаксис JSON в IRB повышает синтаксис, но не в консоли Rails 3.2.22.1? - PullRequest
0 голосов
/ 13 июня 2019

Я отвечаю за поддержку унаследованного приложения Ruby on Rails, и в настоящее время я тестирую его на Ruby v1.8.7 (уровень обновления 2013-12-22 375).Приложение использует Rails v3.2.22.1 (версия Rails предоставлена ​​ Rails LTS ).Я сталкиваюсь со странной проблемой синтаксиса.

В ванильной консоли IRB синтаксис хеш-ракеты для хэша работает, как ожидается, а синтаксис JSON для вызывает синтаксическую ошибку, как и ожидалось.Однако в консоли Rails синтаксис JSON работает просто отлично, и я не могу понять, почему он НЕ вызывает синтаксическую ошибку.

Есть идеи, что происходит в приведенном ниже коде?

# in Bash
$ ruby -v
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]

# in Rails console
Loading development environment (Rails 3.2.22.1)
irb(main):001:0> system "ruby -v"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]
=> true
irb(main):002:0> {a: 1} # JSON syntax doesn't trigger SyntaxError
=> {:a=>1} 
# loading vanilla IRB *()
irb(main):003:0> system "irb" # loading vanilla IRB

# in vanilla IRB (via Rails console, if that matters)
irb(main):001:0> system "ruby -v"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]
=> true
irb(main):002:0> {a: 1} # expected syntax error
SyntaxError: compile error
(irb):2: odd number list for Hash
{a: 1}
   ^
(irb):2: syntax error, unexpected ':', expecting '}'
{a: 1}
   ^
  from (irb):2

1 Ответ

0 голосов
/ 13 июня 2019

Оказалось, что версия Ruby, установленная в .ruby-version, была 1.9.3-p551, и это привело к загрузке Rails с использованием Ruby 1.9.3-p551.Это не было сразу очевидно, когда я получил версию Ruby из системы, но проверка версии Ruby из приложения выявила разницу.

$ bundle exec rails console
irb(main):001:0> system "ruby -v"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]
=> true
irb(main):002:0> RUBY_VERSION
=> "1.9.3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...