在 Windows 上启动 Rails v4.1.0 服务器时出现 TZInfo::DataSourceNotFound 错误
-
21-12-2019 - |
题
我使用 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 上使用 64 位版本的 Ruby,则添加 :x64_mingw
平台列表如下:
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
或者,您可以删除 platforms
完全选项。
执行此操作后,运行 bundle update
在命令行安装 tzinfo-data gem,然后您就可以启动 Rails 服务器或控制台。
背景
这 TZInfo::DataSourceNotFound
TZInfo 引发错误,TZInfo 是 Rails 的 Active Support 组件的依赖项。TZInfo 正在您的系统上寻找时区数据源,但未能找到。
在许多基于 Unix 的系统上(例如Linux),TZInfo可以使用该系统 区域信息 目录作为数据源。但是,Windows 不包含这样的目录,因此需要安装 tzinfo-data gem。tzinfo-data gem 包含相同的 zoneinfo 数据,打包为一组 Ruby 模块。
Rails 生成默认值 Gemfile
首次创建应用程序时。如果应用程序是在 Windows 上创建的,则将包含 tzinfo-data 的依赖项。然而(从 Rails 版本 4.1.0 开始),这省略了 :x64_mingw
来自平台列表,因此在 64 位 Windows 版本的 Ruby 上无法正常工作。这 应该修复 在未来的 Rails 版本中。
其他提示
我不得不添加两个宝石来开始服务器。
gem'tzinfo-data'
宝石'tzinfo'
然后捆绑安装。
只是把它放在你的应用程序终端:
gem install tzinfo-data
.
然后将Gemfile Line更改为:
gem 'tzinfo-data', platforms: [:x64_mingw, :mingw, :mswin]
.
然后在终端中再次:
bundle update
.
将直接解决问题。
将以下行添加到GEM文件
Gem'Tzinfo-data',平台:[:x64_mingw,:mingw,:mswin]
在尝试在Docker容器中安装Redmine时,我有那个错误:
RAILS_ENV=production bundle exec rake db:migrate
.
给了我这个错误,因为在我的Ubuntu图像中未安装包生成族划线代码。
apt-get update && apt-get install tzdata -y
.
诀窍。
也许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
希望这些信息对将来的人有帮助。
所以,宝石似乎没有正确安装,我不得不做以下
gem'tzinfo-data' 宝石'tzinfo'
然后
捆绑展示 查看所有宝石
捆绑宝石tzinfo 会给你一个gem的目录
然后,转到该目录。您需要将Tzinfo-Data拼接到Tzinfo中。 在Tzinfo数据文件中,转到.. 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,(不是目录) 并添加此行 要求'tzinfo / data'
这是痛苦的痛苦