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

我已经使用Ruby on Rails v4.1.0创build了一个新的应用程序。 当试图在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 (eg 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' 

我怎样才能解决这个错误?

解决错误

要解决这个错误,你需要确保你的Gemfile中包含了tzinfo-data gem。

首先,检查你的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模块。

当应用程序第一次创build时,Rails会生成一个默认的Gemfile 。 如果应用程序是在Windows上创build的,则会包含对tzinfo-data的依赖关系。 但是(从Rails版本4.1.0开始),这个从平台列表中省略了:x64_mingw ,所以在64位Windows版本的Ruby上无法正常工作。 这应该在未来的Rails版本中得到解决 。

我不得不添加两个gem让服务器启动..

gem'tzinfo-data'
gem'tzinfo'

然后捆绑安装。

只要把它放在你的应用terminal里:

 gem install tzinfo-data 

然后将gemfile行更改为:

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

然后再次在你的terminal:

 bundle update 

这将直接解决问题。

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

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

也许tzinfo没有安装在你的系统上,试着安装它:

  gem install tzinfo gem install tzinfo-data 

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

 RAILS_ENV=production bundle exec rake db:migrate 

给我的错误,因为包tzdata没有安装在我的Ubuntu镜像。

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

做的伎俩。

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

所以,gem似乎不是很好安装,我不得不做下面的事情

gem'tzinfo-data'gem'tzinfo'

然后

捆绑显示看所有gem

捆绑gemtzinfo将得到你的gem的目录

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

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

这是一个很难弄清楚的问题

Interesting Posts