Errore TZInfo :: DataSourceNotFound all’avvio del server Rails v4.1.0 su Windows

Ho creato una nuova applicazione usando Ruby on Rails v4.1.0. Quando si tenta di avviare un server o una console su Windows, sto riscontrando il seguente errore:

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

Come posso risolvere questo errore?

Risoluzione dell’errore

Per risolvere questo errore, dovrai assicurarti che la gem tzinfo-data sia inclusa nel tuo Gemfile .

Prima di tutto, controlla il tuo Gemfile per vedere se esiste un riferimento esistente a tzinfo-data . Se non c’è già un riferimento, quindi aggiungere la seguente riga:

 gem 'tzinfo-data' 

Potresti scoprire che esiste già una linea simile alla seguente:

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

Se stai utilizzando una versione a 64 bit di Ruby su Windows, aggiungi :x64_mingw all’elenco delle piattaforms come segue:

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

In alternativa, è ansible rimuovere completamente l’opzione di platforms .

Dopo aver eseguito questa operazione, esegui l’ bundle update nella riga di comando per installare la gem tzinfo-data e sarai quindi in grado di avviare il tuo server o console Rails.

sfondo

L’errore TZInfo::DataSourceNotFound viene generato da TZInfo, una dipendenza del componente Supporto attivo di Rails. TZInfo sta cercando una fonte di dati sul fuso orario nel tuo sistema, ma non riesce a trovarne uno.

Su molti sistemi basati su Unix (ad esempio Linux), TZInfo è in grado di utilizzare la directory systeminfo di sistema come fonte di dati. Tuttavia, Windows non include tale directory, quindi è necessario installare la gem tzinfo-data. La gem di tzinfo-data contiene gli stessi dati di zonainfo, confezionati come una serie di moduli di Ruby.

Rails genera un Gemfile predefinito quando l’applicazione viene creata per la prima volta. Se l’applicazione viene creata su Windows, verrà inclusa una dipendenza per i dati tzinfo. Tuttavia (a partire da Rails versione 4.1.0), questo omette :x64_mingw dall’elenco delle piattaforms, quindi non funziona correttamente su versioni Windows a 64 bit di Ruby. Questo dovrebbe essere risolto nelle versioni future di Rails.

Ho dovuto aggiungere due gem per far avviare il server ..

gem ‘tzinfo-data’
gem ‘tzinfo’

Quindi installare bundle.

Metti questo nel terminale dell’app:

 gem install tzinfo-data 

quindi cambia la linea gemfile in:

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

poi di nuovo nel tuo terminale:

 bundle update 

Questo risolverà il problema direttamente.

Aggiungi la seguente riga al tuo Gem File

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

Forse tzinfo non è installato sul tuo sistema, prova ad installarlo:

  gem install tzinfo gem install tzinfo-data 

Ho avuto questo errore durante il tentativo di installare Redmine in un contenitore Docker:

 RAILS_ENV=production bundle exec rake db:migrate 

mi ha dato l’errore perché il pacchetto tzdata non è stato installato nella mia immagine di Ubuntu.

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

ha fatto il trucco

Ho avuto anche questo problema e l’ho risolto aggiungendo ENTRAMBI :x64_mingw alla lista di piattaforms per tzinfo-data , E la gem ‘tzinfo’ al gemfile. Quindi installare bundle.

quindi, le gemme non sembravano installarsi correttamente, dovevo fare quanto segue

gem ‘tzinfo-data’ gem ‘tzinfo’

poi

mostra bundle per vedere tutte le gemme

bundle gem tzinfo ti porterà la directory della gem

quindi, vai in quella directory. sarà necessario unire i dati tzinfo a tzinfo. nel file tzinfo-data, vai a .. local_pathname / tzinfo-data-1.2014.5 / lib / tzinfo copia tutto il contenuto di questa directory in … local_pathname / tzinfo-1.2.1 / lib / tzinfo (per me questo significava copiare “dati” nel file e “dati” nella directory)

quindi vai a local_pathname / tzinfo-1.2.1 / lib e apri il file, tzinfo, (non la directory) e aggiungi questa riga richiede ‘tzinfo / data’

questo era un dolore tale da capire