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'

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

Ответ 1

Разрешение ошибки

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

Прежде всего, проверьте 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, зависимостью компонента Active Support для Rails. TZInfo ищет источник данных о часовых поясах в вашей системе, но не смог найти его.

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

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

Ответ 2

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

gem 'tzinfo-data'
gem 'tzinfo'

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

Ответ 3

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

gem install tzinfo-data

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

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

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

bundle update

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

Ответ 4

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

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

Ответ 5

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

RAILS_ENV=production bundle exec rake db:migrate

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

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

сделал трюк.

Ответ 6

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

 gem install tzinfo
 gem install tzinfo-data

Ответ 7

У меня тоже была эта проблема, и я исправил ее, добавив BOTH :x64_mingw в список платформ для tzinfo-data, а gem tzinfo - в gemfile. Затем установите пакет.

Ответ 8

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

Я смог отследить это с тем, где файлы должны быть с помощью команды 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

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

Ответ 9

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

gem 'tzinfo-data' gem 'tzinfo'

то

расслоение увидеть все драгоценные камни

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

затем перейдите в этот каталог. вам необходимо объединить tzinfo-данные в tzinfo. в файле tzinfo-data, перейдите к.. local_pathname/tzinfo-данных 1.2014.5/Library/tzinfo скопируйте все содержимое этого каталога в... local_pathname/tzinfo-1.2.1/Library/tzinfo (для меня это означало копирование "данных" файла и "данных" в каталог)

то идти к local_pathname/tzinfo-1.2.1/Библиотека и откройте файл, tzinfo, (а не каталог) и добавьте эту строку требуют "tzinfo/data"

Это была такая боль, чтобы понять