web-dev-qa-db-ja.com

Rails Windows上のv4.1.0サーバーを開始するTZInfo :: DataSourceNotFoundエラー

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'

このエラーを解決するにはどうすればよいですか?

63
John

エラーの解決

このエラーを解決するには、tzinfo-data gemがGemfileに含まれていることを確認する必要があります。

まず、Gemfileを確認して、tzinfo-dataへの既存の参照があるかどうかを確認します。まだ参照がない場合は、次の行を追加します。

gem 'tzinfo-data'

次のような行が既に存在する場合があります。

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

WindowsでRubyの64ビットバージョンを使用している場合、次のようにプラットフォームのリストに:x64_mingwを追加します。

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

または、platformsオプションを完全に削除できます。

これを実行した後、コマンドラインでbundle updateを実行してtzinfo-data gemをインストールすると、Railsサーバーまたはコンソール)を起動できるようになります。


背景

TZInfo::DataSourceNotFoundエラーは、RailsのActive Supportコンポーネントの依存関係であるTZInfoによって発生しています。 TZInfoはシステム上のタイムゾーンデータのソースを探していますが、それを見つけることができません。

多くのUnixベースのシステム(Linuxなど)では、TZInfoはシステムの zoneinfo ディレクトリをデータのソースとして使用できます。ただし、Windowsにはそのようなディレクトリが含まれていないため、代わりにtzinfo-data gemをインストールする必要があります。 tzinfo-data gemには、一連のRubyモジュールとしてパッケージ化された同じzoneinfoデータが含まれています。

Railsは、アプリケーションが最初に作成されたときにデフォルトのGemfileを生成します。アプリケーションがWindowsで作成された場合、tzinfo-dataの依存関係が含まれます。ただし(Rails version 4.1.0)の時点で、これはプラットフォームのリストから:x64_mingwを省略しているため、Rubyの64ビットWindowsバージョンでは正常に動作しません。 修正する必要があります 将来Railsリリース。

150
Phil Ross

サーバーを起動するには、2つのgemを追加する必要がありました。

gem 'tzinfo-data'
gem 'tzinfo'

次に、バンドルをインストールします。

14
Russell Clarvoe

これをあなたのアプリ端末に置くだけです:

gem install tzinfo-data

次に、gemfile行を次のように変更します。

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

その後、再びターミナルで:

bundle update

それは問題を直接解決します。

8
Adly

RedmineをDockerコンテナにインストールしようとすると、そのエラーが発生しました。

Rails_ENV=production bundle exec rake db:migrate

パッケージtzdataがUbuntuイメージにインストールされていないため、エラーが発生しました。

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

トリックをしました。

5
Matthieu

Gemファイルに次の行を追加します

gem 'tzinfo-data'、プラットフォーム:[:x64_mingw、:mingw、:mswin]

5
HaTiMSuM

Tzinfoがシステムにインストールされていない可能性があります。インストールしてみてください。

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

私もこの問題を抱えていたので、:x64_mingwのプラットフォームのリストtzinfo-data、およびgem 'tzinfo'をgemfileに追加します。次に、バンドルをインストールします。

1
Stu Horsfield

MacOs Mojave 10.14.5でこの問題に遭遇しましたが、macOsのシンボリックリンクが提供された正しいゾーン情報ファイルを読み取っていないことが原因であることがわかりました。

ファイルがコマンドTZInfo::ZoneinfoDataSource.search_pathを使用する場所と、["/usr/share/zoneinfo", "/usr/share/lib/zoneinfo", "/etc/zoneinfo"]の出力を提供する場所でこれを追跡できました。

/usr/share/zoneinfoを調べ始めたところ、読み取り可能なファイルがありました。しかしRailsはまだそれらを見つけず、それらを読んで、それらを実行していませんでした..?それから、/usr/share/zoneinfo.default/の他のファイルから/etc/zoneinfoへのシンボリックリンクを作成しました(最後のパスTZInfoが検索します)

最後に、この問題を解決するために私のために働いたコマンドはln -s /usr/share/zoneinfo.default /etc/zoneinfoでした

この情報が将来誰かに役立つことを願っています。

0