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'
このエラーを解決するにはどうすればよいですか?
エラーの解決
このエラーを解決するには、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リリース。
サーバーを起動するには、2つのgemを追加する必要がありました。
gem 'tzinfo-data'
gem 'tzinfo'
次に、バンドルをインストールします。
これをあなたのアプリ端末に置くだけです:
gem install tzinfo-data
次に、gemfile行を次のように変更します。
gem 'tzinfo-data', platforms: [:x64_mingw, :mingw, :mswin]
その後、再びターミナルで:
bundle update
それは問題を直接解決します。
RedmineをDockerコンテナにインストールしようとすると、そのエラーが発生しました。
Rails_ENV=production bundle exec rake db:migrate
パッケージtzdata
がUbuntuイメージにインストールされていないため、エラーが発生しました。
apt-get update && apt-get install tzdata -y
トリックをしました。
Gemファイルに次の行を追加します
gem 'tzinfo-data'、プラットフォーム:[:x64_mingw、:mingw、:mswin]
Tzinfoがシステムにインストールされていない可能性があります。インストールしてみてください。
gem install tzinfo
gem install tzinfo-data
私もこの問題を抱えていたので、:x64_mingw
のプラットフォームのリストtzinfo-data
、およびgem 'tzinfo'をgemfileに追加します。次に、バンドルをインストールします。
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
でした
この情報が将来誰かに役立つことを願っています。