Ошибка TZInfo::DataSourceNotFound при запуске сервера Rails v4.1.0 в Windows

Я создал новое приложение, используя Ruby on Rails v4.1.0. При попытке запустить сервер или консоль в Windows возникает следующая ошибка:

$ rails server
Booting WEBrick
Rails 4.1.0 application starting in development on ....

Exiting
c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/tzinfo-1.1.0/lib/tzinfo/data_source.rb:199:
in `rescue in create_default_data_source': 
No timezone data source could be found. To resolve this, either install 
TZInfo::Data (e.g. by running `gem install tzinfo-data`) or specify a zoneinfo 
directory using `TZInfo::DataSource.set(:zoneinfo, zoneinfo_path)`.
(TZInfo::DataSourceNotFound) 
from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/tzinfo-1.1.0/lib/tzinfo/data_source.rb:196:
in `create_default_data_source'

Как я могу решить эту ошибку?


person John    schedule 11.04.2014    source источник
comment
Как вы сделали то, что предлагает ошибка? т.е. gem install tzinfo-data или укажите каталог zoneinfo с помощью `TZInfo::DataSource.set(:zoneinfo, zoneinfo_path). Если да, то каков был результат?   -  person Pavling    schedule 12.04.2014


Ответы (9)


Устранение ошибки

Чтобы устранить эту ошибку, вам нужно убедиться, что гем tzinfo-data включен в ваш файл Gemfile.

Прежде всего, проверьте свой Gemfile, чтобы увидеть, существует ли существующая ссылка на tzinfo-data. Если ссылки еще нет, добавьте следующую строку:

gem 'tzinfo-data'

Вы можете обнаружить, что уже есть такая строка:

gem 'tzinfo-data', platforms: [:mingw, :mswin]

Если вы используете 64-битную версию Ruby в Windows, добавьте :x64_mingw в список платформ следующим образом:

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]

Кроме того, вы можете вообще удалить параметр platforms.

После этого запустите bundle update в командной строке, чтобы установить гем tzinfo-data, после чего вы сможете запустить свой сервер или консоль Rails.


Фон

Ошибка TZInfo::DataSourceNotFound вызывается TZInfo, зависимостью компонента активной поддержки Rails. TZInfo ищет источник данных о часовом поясе в вашей системе, но не может его найти.

Во многих системах на основе Unix (например, Linux) TZInfo может использовать системный каталог zoneinfo как источник данных. Однако Windows не включает такой каталог, поэтому вместо него необходимо установить гем tzinfo-data. Гем tzinfo-data содержит те же данные zoneinfo, упакованные в виде набора модулей Ruby.

Rails генерирует значение по умолчанию Gemfile при первом создании приложения. Если приложение создано в Windows, то будет включена зависимость для tzinfo-data. Однако (начиная с версии Rails 4.1.0) это исключает :x64_mingw из списка платформ, поэтому не работает корректно в 64-битных версиях Ruby для Windows. Это должно быть исправлено в будущих выпусках Rails.

person Phil Ross    schedule 11.04.2014
comment
Должен ли tzinfo-data находиться в Gemfile постоянно или только до тех пор, пока команда Rails что-то не исправит? - person Mark Boulder; 21.05.2014
comment
@MarkBoulder Вам нужно будет постоянно хранить tzinfo-data в своем Gemfile, если вы хотите запустить свой проект Rails в Windows. - person Phil Ross; 21.05.2014
comment
Я на OpenBSD, кажется, мне это тоже нужно. Надеюсь, он уже есть в Gemfile для вновь созданных приложений Rails? - person Mark Boulder; 22.05.2014
comment
@MarkBoulder tzinfo-data в настоящее время требуется для OpenBSD, поскольку текущая версия TZInfo не может использовать OpenBSD. системный каталог zoneinfo. В репозитории git есть исправление. Это будет включено в следующий выпуск TZInfo. - person Phil Ross; 22.05.2014
comment
TZInfo выпущена версия 1.2.0. Сюда входит исправление для загрузки файлов zoneinfo в BSD и Solaris. - person Phil Ross; 27.05.2014
comment
Из github.com/tzinfo/tzinfo/wiki/ - person Matthieu; 18.09.2017
comment
как добавить докер в список платформ при использовании alpine? - person Blankman; 05.09.2018
comment
@Blankman, вы можете запустить bundle platform, чтобы определить текущую платформу. - person Phil Ross; 10.09.2018

Мне пришлось добавить два драгоценных камня, чтобы запустить сервер.

gem 'tzinfo-data'
драгоценный камень 'tzinfo'

Затем пакетная установка.

person Russell Clarvoe    schedule 12.04.2014

У меня была эта ошибка при попытке установить Redmine в контейнере Docker:

RAILS_ENV=production bundle exec rake db:migrate

дал мне ошибку, потому что пакет tzdata не был установлен в моем образе Ubuntu.

apt-get update && apt-get install tzdata -y

сделал трюк.

person Matthieu    schedule 18.09.2017

Просто поместите это в свой терминал приложения:

gem install tzinfo-data

затем измените строку gemfile на:

gem 'tzinfo-data', platforms: [:x64_mingw, :mingw, :mswin]

затем снова в вашем терминале:

bundle update

Это решит проблему напрямую.

person Adly    schedule 08.10.2014

Добавьте следующую строку в ваш файл Gem

гем 'tzinfo-data', платформы: [:x64_mingw,:mingw, :mswin]

person HaTiMSuM    schedule 23.04.2014

Возможно, tzinfo не установлен в вашей системе, попробуйте установить его:

 gem install tzinfo
 gem install tzinfo-data
person M-Razavi    schedule 28.09.2014
comment
Также добавьте гем 'tzinfo-data', платформы: [:mingw, :mswin, :x64_mingw] в \Ruby21-x64\lib\ruby\gems\2.1.0\gems\railties-4.1.6\lib\rails\generators \rails\app\templates\Gemfile файл. Затем это будет добавлено во все новые приложения по умолчанию. - person TSV; 14.10.2014

У меня тоже была эта проблема, и я исправил ее, добавив ОБА :x64_mingw в список платформ для tzinfo-data, И гем «tzinfo» в файл gem. Затем пакетная установка.

person Stu Horsfield    schedule 04.04.2015

Я столкнулся с этой проблемой в macOs Mojave 10.14.5 и обнаружил, что это связано с тем, что моя символическая ссылка в macOs не читала правильные предоставленные файлы информации о зоне.

Я смог отследить это, используя команду TZInfo::ZoneinfoDataSource.search_path, где должны находиться файлы, и это дало вывод ["/usr/share/zoneinfo", "/usr/share/lib/zoneinfo", "/etc/zoneinfo"].

Я начал просматривать /usr/share/zoneinfo, и там были файлы, доступные для чтения. Однако рельсы все еще не находили их, не читали, не выполняли..? Затем я создал символическую ссылку из другого файла в /usr/share/zoneinfo.default/ на /etc/zoneinfo (последний путь ищет TZInfo)

Итак, наконец, команда, которая помогла мне решить эту проблему, была ln -s /usr/share/zoneinfo.default /etc/zoneinfo

Надеюсь, эта информация будет полезна кому-то в будущем.

person Jonathan Fairbanks    schedule 07.06.2019

Итак, драгоценные камни, похоже, не установились должным образом, мне пришлось сделать следующее

gem 'tzinfo-data' драгоценный камень 'tzinfo'

тогда

пакетное шоу, чтобы увидеть все драгоценные камни

bundle gem tzinfo предоставит вам каталог драгоценных камней

затем перейдите в этот каталог. вам нужно будет вставить tzinfo-data в tzinfo. в файле tzinfo-data перейдите в.. локальный_путь/tzinfo-data-1.2014.5/lib/tzinfo скопируйте все содержимое этого каталога в... локальный_путь/tzinfo-1.2.1/lib/tzinfo (для меня это имелось в виду копирование «данных» файла и «данных» каталога)

затем перейдите в local_pathname/tzinfo-1.2.1/lib и откройте файл tzinfo (не каталог) и добавьте эту строку require 'tzinfo/data'

это было так больно понять

person slob    schedule 09.07.2014