在Windows上启动Rails v4.1.0服务器的TZInfo :: DataSourceNotFound错误

时间:2014-04-11 20:45:41

标签: ruby-on-rails ruby ruby-on-rails-4.1 tzinfo

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

如何解决此错误?

9 个答案:

答案 0 :(得分:150)

解决错误

要解决此错误,您需要确保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正在引发TZInfo::DataSourceNotFound错误,这是Rails的Active Support组件的依赖项。 TZInfo正在寻找您系统上的时区数据源,但未能找到它。

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

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

答案 1 :(得分:14)

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

gem'tzinfo-data'
宝石'tzinfo'

然后捆绑安装。

答案 2 :(得分:8)

只需将其放入您的应用终端:

gem install tzinfo-data

然后将gemfile行更改为:

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

然后再次在您的终端:

bundle update

这将直接解决问题。

答案 3 :(得分:5)

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

  

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

答案 4 :(得分:4)

尝试在Docker容器中安装Redmine时遇到了错误:

RAILS_ENV=production bundle exec rake db:migrate

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

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

做了这个伎俩。

答案 5 :(得分:2)

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

 gem install tzinfo
 gem install tzinfo-data

答案 6 :(得分:1)

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

答案 7 :(得分:0)

我在macOs Mojave 10.14.5上遇到了这个问题,发现这与我在macOs中的符号链接无法读取正确提供的区域信息文件有关。

我能够使用以下命令来跟踪文件的位置 ArrayA = Array(123, 456, 789) ArrayB = Array(123, 567, 912) ArrayC = Array(456, 789, 567) ,它提供了TZInfo::ZoneinfoDataSource.search_path的输出。

我开始研究["/usr/share/zoneinfo", "/usr/share/lib/zoneinfo", "/etc/zoneinfo"],那里有可供读取的文件。但是,rails仍然没有找到它们,没有读取它们,执行它们..?因此,我然后创建了从/usr/share/zoneinfo中的另一个文件到/usr/share/zoneinfo.default/的符号链接(查找TZInfo的最后路径)

因此,最终对我有用的命令是/etc/zoneinfo

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

答案 8 :(得分:-1)

所以,宝石似乎没有正确安装,我必须做以下

gem' tzinfo-data' 宝石' tzinfo'

然后

  

捆绑秀   看到所有的宝石

     

捆绑gem tzinfo   将为您提供宝石的目录

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

然后 去 local_pathname / tzinfo-1.2.1 / lib中 并打开文件,tzinfo,(不是目录) 并添加此行 要求&#t; tzinfo / data'

这是一个很难找到的痛苦