70

我使用 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'

如何解决此错误?

4

10 回答 10

158

解决错误

要解决此错误,您需要确保 tzinfo-data gem 包含在您的Gemfile.

首先,检查您Gemfile是否存在对tzinfo-data. 如果还没有引用,则添加以下行:

gem 'tzinfo-data'

你可能会发现已经有如下一行:

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

如果您在 Windows 上使用 64 位版本的 Ruby,则添加:x64_mingw到平台列表中,如下所示:

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

或者,您可以完全删除该platforms选项。

完成此操作后,bundle update在命令行运行以安装 tzinfo-data gem,然后您将能够启动 Rails 服务器或控制台。


背景

TZInfo::DataSourceNotFound错误是由 TZInfo 引发的,它是 Rails 的 Active Support 组件的依赖项。TZInfo 正在您的系统上寻找时区数据的来源,但未能找到。

在许多基于 Unix 的系统(例如 Linux)上,TZInfo 能够使用系统zoneinfo目录作为数据源。但是,Windows 不包含这样的目录,因此需要安装 tzinfo-data gem。tzinfo-data gem 包含相同的 zoneinfo 数据,打包为一组 Ruby 模块。

Gemfile首次创建应用程序时,Rails 会生成一个默认值。如果应用程序是在 Windows 上创建的,则将包含 tzinfo-data 的依赖项。但是(从 Rails 版本 4.1.0 开始),这:x64_mingw从平台列表中省略,因此在 Ruby 的 64 位 Windows 版本上无法正常工作。这应该在未来的 Rails 版本中修复。

于 2014-04-11T21:59:31.957 回答
14

我必须添加两个宝石才能启动服务器..

宝石“tzinfo 数据”
宝石“tzinfo”

然后捆绑安装。

于 2014-04-12T13:44:34.843 回答
13

尝试在 Docker 容器中安装 Redmine 时出现该错误:

RAILS_ENV=production bundle exec rake db:migrate

给了我错误,因为tzdata我的 Ubuntu 映像中没有安装软件包。

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

成功了。

于 2017-09-18T09:27:26.017 回答
8

只需将其放在您的应用程序终端中:

gem install tzinfo-data

然后将 gemfile 行更改为:

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

然后再次在您的终端中:

bundle update

那将直接解决问题。

于 2014-10-08T00:59:54.380 回答
5

将以下行添加到您的 Gem 文件中

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

于 2014-04-23T14:10:29.767 回答
2

也许您的系统上没有安装 tzinfo,尝试安装它:

 gem install tzinfo
 gem install tzinfo-data
于 2014-09-28T06:41:44.350 回答
1

我也遇到了这个问题,并通过将两者都添加:x64_mingw到平台列表tzinfo-data和 gem 'tzinfo' 到 gemfile 来修复它。然后捆绑安装。

于 2015-04-04T00:53:27.073 回答
0

我在 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

希望这些信息对将来的某人有所帮助。

于 2019-06-07T22:09:36.933 回答
0

我正在使用 Windows,几天来我无法解决这个问题。所以我们 64 位平台的解决方案是在终端中输入以下内容:

gem install tzinfo
gem install tzinfo-data

然后再导航回您的gem 文件。如果您还没有创建一个,请在终端上使用 rails new xyznameofyours 创建它。

然后将代码行替换为: gem 'tzinfo-data',platforms: [:mingw, :mswin, :x64_mingw]gem "tzinfo-data",platforms: %i[ mingw mswin x64_mingw jruby ] 到这个:

gem 'tzinfo-data'
gem 'tzinfo'

只有这样,您的代码才能工作!

于 2022-02-18T12:55:17.020 回答
-1

所以,宝石似乎没有正确安装,我必须执行以下操作

宝石“tzinfo 数据”宝石“tzinfo”

然后

捆绑展示以查看所有宝石

bundle gem tzinfo 将为您提供 gem 的目录

然后,转到该目录。您需要将 tzinfo-data 拼接到 tzinfo 中。在 tzinfo-data 文件中,转到.. local_pathname/tzinfo-data-1.2014.5/lib/tzinfo 将此目录的所有内容复制到... local_pathname/tzinfo-1.2.1/lib/tzinfo (对我来说这个意味着复制“数据”文件和“数据”目录)

然后转到 local_pathname/tzinfo-1.2.1/lib 并打开文件 tzinfo(不是目录)并添加这一行 require 'tzinfo/data'

这真是太痛苦了

于 2014-07-09T09:16:10.693 回答