尝试 运行 一个 Rails 应用程序时出现超时错误

Timeout error when trying to run a Rails app

我正在尝试填充以下 PostgreSQL 数据库:https://github.com/toddwschneider/nba-shots-db。我遵循了所有必要的步骤,包括安装 Ruby、PostgreSQL、Rails 等。但是当我尝试 运行 bundle exec rake db:setup 时,出现超时错误:

44738@christine-cluster-m:~/nba-shots-db$ bundle exec rake db:setup
Created database 'nba-shots-db_development'
Created database 'nba-shots-db_test'
-- enable_extension("plpgsql")
   -> 0.0119s
-- create_table("closest_defender_aggregates", {:force=>:cascade})
   -> 0.0182s
-- create_table("delayed_jobs", {:force=>:cascade})
   -> 0.0129s
-- create_table("players", {:force=>:cascade})
   -> 0.0125s
-- create_table("shots", {:force=>:cascade})
   -> 0.0124s
-- enable_extension("plpgsql")
   -> 0.0133s
-- create_table("closest_defender_aggregates", {:force=>:cascade})
   -> 0.0170s
-- create_table("delayed_jobs", {:force=>:cascade})
   -> 0.0134s
-- create_table("players", {:force=>:cascade})
   -> 0.0124s
-- create_table("shots", {:force=>:cascade})
   -> 0.0131s
rake aborted!
RestClient::Exceptions::ReadTimeout: Timed out reading data from server
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:733:in `rescue in transmit'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:642:in `transmit'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:145:in `execute'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:52:in `execute'

...

Caused by:
Net::ReadTimeout: Net::ReadTimeout
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:448:in `net_http_do_request'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:721:in `block in transmit'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:715:in `transmit'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:145:in `execute'
/home/44738/.rvm/gems/ruby-2.5.3/gems/rest-client-2.0.2/lib/restclient/request.rb:52:in `execute'
/home/44738/nba-shots-db/app/lib/nba_stats_client.rb:156:in `get'

...

Tasks: TOP => db:setup => db:seed
(See full trace by running task with --trace)

所以看起来它创建了两个数据库,并开始创建表,这似乎是一个好兆头。但后来我收到超时错误。这与我在 Hadoop 集群中执行此操作有关吗?我对所有这一切都非常陌生,所以如果这个错误很明显,请提前道歉。另外让我知道添加任何其他信息是否对我有帮助。在此先感谢您的帮助!

RestClient 超时。 RestClient 是一个用于发出 Web 请求的工具。根据您的堆栈跟踪,调用站点是 app/lib/nba_stats_client.rb 的第 156 行。看看你要求 RestClient 在那里做什么。它只是在访问给定的 URL 时超时。尝试自己访问 URL(将其粘贴到浏览器或使用 curl),您可能会看到相同的超时。

从计算机 运行 您的 rails 服务器,您可以使用 curl 之类的工具来形成相同的请求,并且很可能会看到相同的超时:

curl <url>

gem 尝试 load data from https://stats.nba.com/stats/ 但服务器没有响应。您无能为力解决该问题。

也许通过打开 issue on their GitHub page 通知 gem 的维护者。也许维护人员也可以访问服务器,可以看看。