部署 访问自己项目的时候,用 localhost 很快,但是用 IP 的时候非常慢,不知道问题出在哪里?

runup · 2013年10月03日 · 最后由 datty258 回复于 2013年11月04日 · 8218 次阅读

如题,请各位前辈能不能帮我看看。非常感谢。 源码地址:https://github.com/runup/cims_final 环境:ubuntu13.04 sqlite3 ruby1.9.3 rails 3.2.13 部署:

rake sunspot:solr:start
rale snspot:reindex
rails s

需要具体信息,比如能否从 Log 中看出处理一条 request, ip 比 localhost 慢,慢在什么地方了?

你是说用 localhost 和 127.0.0.1 么?

#2 楼 @larryzhao 不是这里的 ip 是我在局域网中的 ip

#1 楼 @lgn21st 谢谢前辈,我是新手,不太懂你说的问题,我的源码已经提供,能不能帮我看一下,非常感谢。我参考了http://bbs.csdn.net/topics/250062649 但是不太理解,求帮助。

#2 楼 @larryzhao 源码已经提供,能否帮我看一下,非常感谢。

我认为代码问题是可以排除的,因为你也说了,在本地很快。

  • 请问到底慢到什么程度?到底慢多少?慢一点?几百毫秒,几秒,甚至十几秒?
  • 你们的局域网网络质量如何?
  • 直接到服务器上访问 localhost 速度如何?
  • 这台服务器和本机的数据规模一样么?
  • 服务器是怎么部署的,跑的是 dev 环境还是 prod 环境?有没有用 nginx 或者其他 httpd 做前端反响代理服务?如果有的话,从访问日志中能否找到某些线索?比如错误的设置了 ssl 导致强制 Redirect 最后 timeout 之类的错误信息,都是可以在访问日志中找到线索的。

#6 楼 @lgn21st 恩,我在部署在本地,直接用的是 dev 环境,而没有用 prod.还有在配置文件中 ssl 设置成了 true.难道这个也有影响?

我也碰到过这种情况,貌似 webrick 的问题,后来换成 thin 就快了,Gemfile 增加

gem 'thin'

然后

bundle install
rails s

再用 ip 访问就快了。 不过我个人更愿意用 apache + passenger 来部署开发环境。

#8 楼 @beiersi 您的意思是说需要更换服务器了?

#9 楼 @runup 也就是用 thin 替换默认的 webrick 即可。

#7 楼 @runup 我上面提到的 ssl 是一个例子,证明有些问题你不去查 log 是无法发现的。

用 dev 问题也不大,你看一下这个帖子,看是否对你有帮助: http://stackoverflow.com/questions/4296921/access-webrick-from-a-different-pc

#11 楼 @lgn21st 恩,谢谢,我再看看

把 DNS 换一下试试,或者把 BasicSocket.do_not_reverse_lookup = true 试一下

#13 楼 @lululau 这是在哪个配置文件里面的。新手,小白问题

修改 DNS: /etc/resolv.conf

#13 楼 @lululau BasicSocket.do_not_reverse_lookup = true 到哪里进行配置

#8 楼 @beiersi 我用了你方法,确实速度提高了很多,非常感谢。我的本意是局域网中的其他人可以访问到自己的项目,但是别人访问我的 IP 的时候还是速度很慢,自己访问速度还可以。能否有更好的解决方法?

你如果是 rails s ENV 是 development 方式启动起来给大家访问,应该会碰到很慢的情况,首先你只有一个 process, 然后你的 assets 没有 compile 过,有可能有时候会重新 live 的 compile assets, 另外你 assets 都要从你的 webrick 来 serve, 没有 compile 的每个 assets 都是一个 request.

这些都是会导致比较慢的情况,也就是为啥要有devprd之分了。

真的想用的话,还是局域网里找个服务器 nginx + unicorn/passenger 部署一下吧,花不了多少时间。

#17 楼 @runup 试试 apache/nginx + passenger 这种方式,RackENV 设为 development,少量访问的话,速度还是可以接受的。

建议先别管各种部署方案,那样就把问题变复杂了。 导致缓慢无非两个因素:本机响应能力网络

本机响应能力:用 production 模式启动服务器( RAILS_ENV=production rails s 即可),然后看你的应用日志,rails 日志会对每条请求记录耗时,研究一下看看是否有特别长的记录。

网络:用浏览器的相关功能进行分析,例如 chrome,按 F12,看 network 这个 tab 里面的信息,关键是每个请求的 timeline,比如 DNSLookup、Connection 信息,然后你就知道原因了

#19 楼 @beiersi 求合适的文档资料。

#21 楼 @runup 正好等锅里焖的肉,简单写一下基本步骤吧,环境 ubuntu 13.04,apache2,ruby2.0.0 1.安装 passenger

gem install passenger

2.安装 apache mod_passenger

### 如果系统缺少某些包按提示apt-get安装即可
passenger-install-apache2-module

3.创建 apache 模块配置文件,注意修改 passenger 的路径

###/etc/apache2/mods-available/passeneger.load

LoadModule passenger_module /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4
.0.19/buildout/apache2/mod_passenger.so
###/etc/apache2/mods-available/passeneger.conf

<IfModule passenger_module>
    PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.19
    PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p247/ruby
</IfModule>

然后执行一下命令启用一下 mod_passenger

sudo a2enmod passenger

4,更改 site 文件,如果直接用 ip 访问。直接改 /etc/apache2/sites-available/default 文件

###/etc/apache2/sites-available/default

# rails env
RackENV development

DocumentRoot /your_rails_path/public #注意是public目录

<Directory /your_rails_path/public>
    AllowOverride all
    Options -MultiViews #这个一定要有
</Directory>

重启 apache,完成。

sudo service apache2 restart

#23 楼 @beiersi 有一种流着口水看教程的节奏......

需要 登录 后方可回复, 如果你还没有账号请 注册新账号