Windows上Rails 5启动非常缓慢

5
我已在我的笔记本电脑上安装了RoR 5。
  • Windows 10
  • SSD
  • 4GB RAM
  • i5第五代
我开始着手一个项目,想特别测试它在Windows下的表现,并注意到一些延迟和潜在问题。
所以我开始了一个新的Rails应用程序,排除了我的代码,但延迟仍然存在。
我还测试了Webrick,延迟仍然存在。
我说的是28秒!!!
我知道有许多相关问题,但大多数都涉及早期版本的Rails。
我想要在本地服务器上运行此应用程序的主要原因是用户在他的机器上使用Windows...
C:\Users\John\railstestapp\testapp>rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options

这里有很大的时间间隔,接近25秒

*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.6.0 (ruby 2.2.4-p230), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000

正如你所期望的那样,这种性能在整个页面中都持续存在...
有什么想法吗?我错过了什么吗?你们中的任何人在Windows上开发rails 5吗?有什么提示吗?
我还在我的主机上进行了测试
16GB低延迟内存 固态硬盘 AMD FX8350
相同的缓慢响应,但比笔记本电脑快一点!
还有奇怪的事情是,如果我同时运行rails控制台,我会在控制台中看到rails日志打印,但浏览器加载很长时间!
我以为这是一个浏览器问题,所以为了排除这个问题,我用另一台我的本地机器浏览了该网站,所以我只能使用服务器而不是Windows浏览器...仍然没有效果,响应时间真的很慢!
这是快速机器上的Puma
C:\Users\John\SimpleGym\simplegym>rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.6.0 (ruby 2.2.4-p230), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from block (2 levels) in <module:ClassMethods> at C:/Ruby22/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.1/lib/abstract_controller/callbacks.rb:191)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from block (2 levels) in <module:ClassMethods> at C:/Ruby22/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.1/lib/abstract_controller/callbacks.rb:191)
Started GET "/" for ::1 at 2016-10-03 18:59:54 +0300
  ActiveRecord::SchemaMigration Load (0.0ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by SessionsController#index as HTML
  Rendering sessions/index.html.erb within layouts/application
  Session Load (0.0ms)  SELECT "sessions".* FROM "sessions"
  Session Load (0.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
   (0.0ms)  SELECT COUNT(*) FROM "students" INNER JOIN "attendances" ON "students"."id" = "attendances"."student_id" WHERE "attendances"."session_id" = ?  [["session_id", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
   (0.0ms)  SELECT COUNT(*) FROM "students" INNER JOIN "attendances" ON "students"."id" = "attendances"."student_id" WHERE "attendances"."session_id" = ?  [["session_id", 2]]
  Session Load (0.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Rendered sessions/index.html.erb within layouts/application (113.0ms)
Completed 200 OK in 621ms (Views: 538.5ms | ActiveRecord: 8.0ms | Solr: 0.0ms)

这是快速机器上的Webrick

C:\Users\John\SimpleGym\simplegym>rails server webrick
=> Booting WEBrick
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
[2016-10-03 19:17:19] INFO  WEBrick 1.3.1
[2016-10-03 19:17:19] INFO  ruby 2.2.4 (2015-12-16) [i386-mingw32]
[2016-10-03 19:17:19] INFO  WEBrick::HTTPServer#start: pid=9936 port=3000
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from block (2 levels) in <module:ClassMethods> at C:/Ruby22/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.1/lib/abstract_controller/callbacks.rb:191)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from block (2 levels) in <module:ClassMethods> at C:/Ruby22/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.1/lib/abstract_controller/callbacks.rb:191)
Started GET "/" for ::1 at 2016-10-03 19:17:30 +0300
  ActiveRecord::SchemaMigration Load (1.0ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by SessionsController#index as HTML
  Rendering sessions/index.html.erb within layouts/application
  Session Load (0.0ms)  SELECT "sessions".* FROM "sessions"
  Session Load (0.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
   (1.0ms)  SELECT COUNT(*) FROM "students" INNER JOIN "attendances" ON "students"."id" = "attendances"."student_id" WHERE "attendances"."session_id" = ?  [["session_id", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
   (1.0ms)  SELECT COUNT(*) FROM "students" INNER JOIN "attendances" ON "students"."id" = "attendances"."student_id" WHERE "attendances"."session_id" = ?  [["session_id", 2]]
  Session Load (0.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Session Load (0.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Session Load (1.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
   (0.0ms)  SELECT COUNT(*) FROM "students" INNER JOIN "attendances" ON "students"."id" = "attendances"."student_id" WHERE "attendances"."session_id" = ?  [["session_id", 3]]
  Session Load (0.0ms)  SELECT  "sessions".* FROM "sessions" ORDER BY "sessions"."id" DESC LIMIT ?  [["LIMIT", 1]]
  Rendered sessions/index.html.erb within layouts/application (135.0ms)
Completed 200 OK in 679ms (Views: 596.3ms | ActiveRecord: 6.0ms | Solr: 0.0ms)



[2016-10-03 19:17:51] ERROR Errno::ECONNABORTED: An established connection was aborted by the software in your host machine. @ io_fillbuf - fd:8
        C:/Ruby22/lib/ruby/2.2.0/webrick/httpserver.rb:80:in `eof?'
        C:/Ruby22/lib/ruby/2.2.0/webrick/httpserver.rb:80:in `run'
        C:/Ruby22/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
[2016-10-03 19:17:51] ERROR Errno::ECONNABORTED: An established connection was aborted by the software in your host machine. @ io_fillbuf - fd:9
        C:/Ruby22/lib/ruby/2.2.0/webrick/httpserver.rb:80:in `eof?'
        C:/Ruby22/lib/ruby/2.2.0/webrick/httpserver.rb:80:in `run'
C:/Ruby22/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'

感谢大家尝试帮助我,但是我尝试了这些解决方案却没有用...似乎Rails现在还不能做到?

似乎没有一个良好的开发环境,我建议客户在线使用它。

//更新

https://drive.google.com/file/d/0B_flcE49VcE1ZmVPeTFuQjUyU2s/view

我正在上传一个视频展示这个问题。

  • 尝试Ruby 2.3后的更新

安装ruby 2.3时会遇到很多问题:

  • SSL错误关于https://rubygems.org(你必须使用http://)
  • sqlite3错误1(rakefile中的路径)
  • sqlite3在修复错误1后,错误2出现了一个关于sqlite3适配器的错误。

找不到有关错误2的解决方案,停止尝试......

也许我会切换到PG,只是为了看看性能是否更好,并将其标记为已解决,这需要一些时间,所以我会在有空的时候去做 :)

谢谢!


这是启动时间吗?响应时间?还是锤子时间? :) - Taryn East
2
慢的启动时间并不真的重要 - 它们很烦人,但只会发生一次。慢的响应时间更加重要 - 因为它实际上影响了系统性能。注意:我不确定我能帮你很多。我的回答大多是“Windows就是这样”... :((其他人可能有一些想法来帮助你,所以提问是个好主意) - Taryn East
1
啊..我就怕这个..我会尝试上传一些响应时间,就我所记得的,一个简单且轻量的索引页面大约需要600毫秒..还有非常感谢你的帮助。 - frcake
哦,是的,我也在我的主要工作机FX3850、16GB低延迟内存和SSD上测试了它。有趣的是,我没有提到这台机器,但我认为Rails安装有问题。但现在笔记本电脑也失败了,似乎工作机上的Rails还是没问题的。在快速机器上,它稍微快了一点,但仍然太慢,无法成为开发环境...(快速机器上是W7,相同的Rails版本!) - frcake
同样的问题在这里。唯一的区别是我正在WSL(Windows子系统)上运行rails。自从启动或运行specs需要20秒后,使用Windows开发Ruby应用程序已经变得不可能。我尝试在Linux机器上运行相同的应用程序,它可以平稳地运行。 - Paniko0
显示剩余4条评论
4个回答

4

1
我认为这很可能是真正的问题所在。 - Evolve
1
@frcake 在 Rails 问题上留下评论并链接回这篇文章,强调需要关注这类事情通常是很有益的。 - Evolve
@Casper,非常感谢您抽出时间来帮助我!我明天一早就会去做这件事!根据您的答案,我查看了OpenSSL问题,并硬编码了一些随机数,但不是这个人所说的方式!Evolve,在彻底检查了这个答案之后,下一步是将其链接到Ruby部分,我还分享了一个视频链接,展示了这个问题,视频中的应用在Ubuntu上运行得非常好...非常感谢你们。 - frcake
rake -T 在使用 Ruby 2.5.3 和 Rails 5.2.2 的项目上需要4.3分钟的时间。irb; require 'openssl'; OpenSSL::Random.random_bytes(256);则是立即执行的。 - Chloe
@Chloe,你可能想在 Rails 存储库上开一个新的支持票据来解决你的问题。也许 Ruby/Rails 在 Windows 上还存在其他问题。另外,先在 Linux 机器(虚拟或实际)上运行你的项目,以验证这种缓慢确实是由 Windows 导致的,这可能是个好主意。也许你已经这样做了,但从你的评论中并不清楚。 - Casper

1
我自己并没有研究过这个,但你可以尝试使用 Windows 10 中内置的新版 Ubuntu。不过它还处于测试阶段,结果可能会有所不同。首先,你可以尝试安装 Ruby 版本管理器(例如 rvm.io),如果能够运行,那么你的应用程序也有可能能够运行。

https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows

至少这样你就更接近一个真正的posix风格终端。


1
嗯,谢谢!明天一大早我会去看一下,并且回来给您反馈! - frcake
很遗憾客户没有使用W10,我想我会停止寻找解决方案了,似乎Rails无法实现这个功能。我按照很多教程进行了尝试,但是什么都不起作用...谢谢你的时间和努力!如果我找到答案,我会发布帮助的内容...Git桌面版也没有成功 :S - frcake

0

如果你不是使用Win 10系统,我发现默认的命令行界面相当普通,而且没有其他平台上被视为理所当然的许多功能。

我发现最简单的方法是下载GitHub for Windows并使用他们提供的配置终端。(好吧,他们曾经提供过一个终端,但我已经有一段时间没用了)。如果Ubuntu的方法不可行,这个方法值得一试。

https://desktop.github.com


标准的 Windows 可执行文件在 Windows 命令提示符下使用 Ruby 2.5.3 和 Rails 5.2.2 仍需要 4.3 分钟才能运行 rake -T - Chloe

0

我之前忘了提到这个,你也可以尝试RailsInstaller http://railsinstaller.org/en,它是由EngineYard的人开发的,可以为你设置完整的Rails环境。不幸的是,它似乎没有在积极开发:/(一个好处是,在他们的github问题中,没有人报告速度问题)

是的,我知道这很令人沮丧。

只是提醒一下,当我之前在Windows上进行开发时,我个人最终安装了virtualbox并在其中安装了Ubuntu,这对本地开发很有效,但是“安装虚拟机”并不是你要寻找的答案,而且那是在大多数其他选项出现之前。


1
谢谢您,Evolve。我我已经使用railsinstaller安装了我的环境,我明天会仔细检查并告诉您!非常感谢您! - frcake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接