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?
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.
J'ai dû ajouter deux gemmes pour que le serveur démarre.
gem 'tzinfo-data'
gem 'tzinfo'
Puis groupez l'installation.
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.
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.
Ajouter la ligne suivante à votre fichier Gem
bijou 'tzinfo-data', plateformes: [: 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 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.
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.