web-dev-qa-db-fra.com

Erreur TZInfo :: DataSourceNotFound au démarrage de Rails v4.1.0 sous Windows

J'ai créé une nouvelle application avec Ruby on Rails v4.1.0.). Lorsque je tente de démarrer un serveur ou une console sous Windows, le message d'erreur suivant s'affiche:

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

Comment puis-je résoudre cette erreur?

63
John

Résolution de 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 déjà 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 constaterez peut-être 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 platforms.

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


Contexte

Le TZInfo::DataSourceNotFound _ erreur 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 system zoneinfo comme source de données. Cependant, Windows n'incluant pas un tel répertoire, le gem tzinfo-data doit être installé à la place. La gem tzinfo-data contient les mêmes données zoneinfo, présentées dans 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 tzinfo-data sera incluse. Cependant (à partir de Rails version 4.1.0), ceci omet :x64_mingw de la liste des plates-formes, ne fonctionne donc pas correctement sur les versions 64 bits de Ruby sous Windows. Ceci devrait être corrigé à l’avenir Rails libère.

150
Phil Ross

J'ai dû ajouter deux gemmes pour que le serveur démarre.

gem 'tzinfo-data'
gem 'tzinfo'

Puis groupez l'installation.

14
Russell Clarvoe

Il suffit de mettre ceci dans votre terminal d'application:

gem install tzinfo-data

puis changez la ligne gemfile en:

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

puis encore dans votre terminal:

bundle update

Cela résoudra le problème directement.

8
Adly

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é dans mon image Ubuntu.

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

a fait le tour.

5
Matthieu

Ajouter la ligne suivante à votre fichier Gem

bijou 'tzinfo-data', plateformes: [: x64_mingw,: mingw,: mswin]

5
HaTiMSuM

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

 gem install tzinfo
 gem install tzinfo-data
2
M-Razavi

J'ai eu ce problème aussi et je l'ai corrigé en ajoutant À LA FOIS le :x64_mingw À la liste des plateformes pour tzinfo-data, ET la gem 'tzinfo' au gemfile. Puis groupez l'installation.

1
Stu Horsfield

J'ai rencontré ce problème sur macOs Mojave 10.14.5 et j'ai découvert que c'était en partie parce que mon lien symbolique dans macOs ne lisait pas les fichiers d'informations de zone fournis corrects.

J'ai pu localiser avec les fichiers en utilisant la commande TZInfo::ZoneinfoDataSource.search_path et qui ont fourni le résultat de ["/usr/share/zoneinfo", "/usr/share/lib/zoneinfo", "/etc/zoneinfo"].

J'ai commencé à chercher dans /usr/share/zoneinfo et il y avait des fichiers disponibles à lire. Cependant Rails ne les trouve toujours pas, ne les lit pas, ne les exécute pas ..? Alors j’ai créé un lien symbolique à partir de l’autre fichier dans /usr/share/zoneinfo.default/ à /etc/zoneinfo _ (le dernier chemin que TZInfo lève)

Alors finalement, la commande qui a fonctionné pour moi pour résoudre ce problème était ln -s /usr/share/zoneinfo.default /etc/zoneinfo

Espérons que cette information sera utile à quelqu'un dans le futur.

0