Erreur TZInfo :: DataSourceNotFound lors du démarrage du serveur Rails v4.1.0 sous Windows

J’ai créé une nouvelle application en utilisant Ruby on Rails v4.1.0. Lors de la tentative de démarrage d’un serveur ou d’une console sous Windows, je rencontre l’erreur suivante:

$ 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 (eg 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' 

Comment puis-je résoudre cette erreur?

Résoudre l’erreur

Pour résoudre cette erreur, vous devez vous assurer que la gem tzinfo-data est incluse dans votre Gemfile .

Tout d’abord, vérifiez votre Gemfile pour voir s’il existe une référence à tzinfo-data . S’il n’y a pas déjà de référence, ajoutez la ligne suivante:

 gem 'tzinfo-data' 

Vous pouvez constater qu’il existe déjà une ligne comme celle-ci:

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

Si vous utilisez une version 64 bits de Ruby sous Windows, ajoutez :x64_mingw à la liste des plates-formes comme suit:

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

Vous pouvez également supprimer l’option des platformsplatforms .

Après cela, exécutez la bundle update à bundle update sur la ligne de commande pour installer le gem tzinfo-data et vous pourrez alors démarrer votre serveur ou votre console Rails.

Contexte

L’erreur TZInfo::DataSourceNotFound est générée par TZInfo, une dépendance du composant Active Support de Rails. TZInfo recherche une source de données de fuseau horaire sur votre système, mais ne parvient pas à en trouver une.

Sur de nombreux systèmes basés sur Unix (par exemple, Linux), TZInfo peut utiliser le répertoire zoneinfo du système comme source de données. Cependant, Windows n’inclut pas un tel répertoire, le gem tzinfo-data doit donc être installé à la place. Le gem tzinfo-data contient les mêmes données de zoneinfo, regroupées sous la forme d’un ensemble de modules Ruby.

Rails génère un Gemfile par défaut lors de la création de l’application. Si l’application est créée sous Windows, une dépendance pour les données tzinfo sera incluse. Cependant (à partir de la version Rails 4.1.0), cela omet :x64_mingw de la liste des plates-formes, donc ne fonctionne pas correctement sur les versions Windows 64 bits de Ruby. Cela devrait être corrigé dans les futures versions de Rails.

J’ai dû append deux gemmes pour que le serveur démarre.

gem ‘tzinfo-data’
gem ‘tzinfo’

Puis regrouper l’installation.

Il suffit de mettre cela dans votre terminal d’application:

 gem install tzinfo-data 

puis changez la ligne gemfile en:

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

puis à nouveau dans votre terminal:

 bundle update 

Cela résoudra le problème directement.

Ajoutez la ligne suivante à votre fichier Gem

gem ‘tzinfo-data’, plates-formes: [: x64_mingw,: mingw,: mswin]

Peut-être que tzinfo n’est pas installé sur votre système, essayez de l’installer:

  gem install tzinfo gem install tzinfo-data 

J’ai eu cette erreur en essayant d’installer Redmine dans un conteneur Docker:

 RAILS_ENV=production bundle exec rake db:migrate 

m’a donné l’erreur parce que le paquet tzdata n’était pas installé sur mon image Ubuntu.

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

fait le tour

J’ai également eu ce problème et l’ai corrigé en ajoutant à la fois :x64_mingw à la liste des plates tzinfo-data formes pour tzinfo-data , et la gem ‘tzinfo’ au gemfile. Puis regrouper l’installation.

donc, les gemmes ne semblaient pas très bien installer, je devais faire ce qui suit

gem ‘tzinfo-data’ gem ‘tzinfo’

puis

spectacle groupé pour voir tous les joyaux

bundle gem tzinfo vous donnera le répertoire de la gem

ensuite, allez dans ce répertoire. vous devrez raccorder les données tzinfo dans tzinfo. dans le fichier tzinfo-data, allez à .. nom_de_local / tzinfo-data-1.2014.5 / lib / tzinfo copiez tout le contenu de ce répertoire dans … local_pathname / tzinfo-1.2.1 / lib / tzinfo (pour moi cela signifiait copier le “data” du fichier et “data” le répertoire)

puis allez dans local_pathname / tzinfo-1.2.1 / lib et ouvrez le fichier, tzinfo (pas le répertoire) et ajoutez cette ligne avec la commande ‘tzinfo / data’

c’était tellement pénible de comprendre