Articles of ruby on rails上

为什么当nginx被用作代理时,Rails中间件开销如此之高?

感谢Godfrey Chan对我从他那里得到的有益的见解。 他指出,有一个Rack中间件可以为响应中的X-Runtime HTTP报头中的整个Rails请求提供更准确的时间,与日志中报告的时间相比(Completed in XXXms … )。 以下是我从testing中得到的结果: 1 – 在Chrome中访问直接链接到Rails操作: X-Runtime:25ms Chrome“等待”时间:27ms 在Rails日志格式中报告的时间:在7ms内完成200 OK(查看:0.9ms |续集:3.0ms) 2 – 访问相同的URL,但在Chrome中使用带有proxy_pass的nginx: X-Runtime:84ms Chrome“等待”时间:88ms 7ms完成200 OK(查看:0.8ms |续集:2.9ms) 3 – 从Chrome的开发者工具复制Curl地址并用curl运行它-I: X-Runtime:105ms(有时达到400ms) 在88ms内完成200行(查看:2.0ms |续集:5.5ms) 当我尝试很多次时,这些时间都非常一致。 任何想法,如果通过nginx proxy_pass,Rails将花费更长的时间来提供相同的请求? 我知道Curl不能利用像keep-alive这样的function,但是我相信nginx能够获得它的优势。 但无论如何,打开连接的时间不应该被X-Runtime头部考虑在内,对吧?

Nginx的子地点

我试图用nginx为两个项目设置一个开发服务器,一个在rails中,另一个在PHP中。 我希望两个项目的基本URL(dev.example.com)和每个项目的子位置(dev.example.com/rails_proj和dev.example.com/php_proj)。 我的nginx conf如下所示: server { listen 80; server_name dev.example.com; passenger_enabled on; passenger_app_env development; passenger_buffer_response off; root /var/www/dev; location ~ ^/rails_proj { root /public; passenger_base_uri /rails_proj; passenger_app_root /var/www/dev/rails_proj; passenger_document_root /var/www/dev/rails_proj/public; } location ~ ^/php_proj { root /web; try_files $uri /app_dev.php$is_args$args; location ~ \.php(/|$) { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } […]

Rails将协议设置为始终HTTP

我正在Vagrant内部运行一个Rails应用程序。 我试图在QA模式下运行我的应用程序以反映我的部署环境。 我在QA环境中的负载平衡器上进行SSL终止,所以我希望能够通过http运行我的Rails应用程序,而不是任何地方的https。 我正在使用Devise进行用户validation。 我可以加载我的应用程序,但是当我login时,devise总是想redirect到https。 我似乎无法让它performance不同。 我已经帮助devise维护人员寻求帮助,但他们没有任何分享的见解。 我试过设置config.force_ssl = false但这似乎没有什么差别。 我正在Unicorn下运行应用程序,代理到nginx。 任何有识之士将不胜感激!

在发布带有多个文件字段的表单时从nginx获取400状态

我在生产中使用rails 4.2和nginx。 我有一个与多个文件字段的表单。 直到昨天,这个function一直在按预期工作。 但是一个奇怪的问题刚刚到来。 问题是:发布此表单时,它会加载。 我查了nginx的错误日志,没有find任何东西。 在检查访问日志时,在超时之后,我获得了该请求的400状态。 我已通过禁用文件字段进行检查。 如果在这种forms下,一个文件字段是活动的,那么它的工作。 但是激活多个文件域出现这样的错误。 000.11.221.162 – – [19/Aug/2016:11:41:16 +0000] "POST /categories HTTP/1.1" 400 0 "http://someapp.com/categories/new" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36" 有没有人遇到这样的问题。 任何build议都会有帮助。 nginxconfiguration http{ passenger_root /usr/local/rvm/gems/ruby-2.1.0@global/gems/passenger-5.0.21; passenger_ruby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name xxx.xxx.xxx.xx; passenger_enabled […]

大机器上的Rails应用程序只能获得60个请求/秒的基准testing结果

我在一台结实的机器上托pipe一个Rails应用程序 – 我认为 – 应该能够处理比我给它更高的负载。 以下是来自ApacheBench的压倒性testing结果: ab -kc 250 -n 1000 -H "Accept-Encoding: gzip,deflate" https://www.mysite.com/ Server Software: nginx/1.0.15 Server Hostname: www.mysite.com Server Port: 443 SSL/TLS Protocol: TLSv1/SSLv3,DHE-RSA-AES256-SHA,2048,256 Document Path: / Document Length: 4258 bytes Concurrency Level: 250 Time taken for tests: 16.498 seconds Complete requests: 1000 HTML transferred: 4258000 bytes Requests per second: 60.61 [#/sec] […]

如何找出导致独angular兽工人超时的原因

人们总是声称我的网站总是挂在一些页面上。 我检查了独angular兽stderr日志,并发现许多超时错误,如: E, [2013-08-14T09:27:32.236478 #30027] ERROR — : worker=5 PID:11619 timeout (601s > 600s), killing E, [2013-08-14T09:27:32.252252 #30027] ERROR — : reaped #<Process::Status: pid=11619,signaled(SIGKILL=9)> worker=5 I, [2013-08-14T09:27:32.266141 #4720] INFO — : worker=5 ready 有很多这样的错误信息。 然后,我去轨生产日志,通过search独angular兽错误时间减601sfind确切的要求。 这些超时请求,都在页面渲染阶段被扼杀。 这些请求的sql已经完成了。 它永远不会结束: Processing by XXXController#index as HTML Rendered xxx/index.html.erb within layouts/application (41.4ms) Rendered shared/_sidebar.html.erb (200.9ms) 没有完整的。 这些请求中的大多数成功地服务 我不知道为什么在随机时间,它挂在那里。 我不知道是什么原因造成的。 […]

使用Rails创build带X-Accel-Redirect的POST请求?

我正在使用rails 4,我代理一个GET请求到另一台服务器,像这样: def proxy_video(path) self.status = 200 response.headers["X-Accel-Redirect"] = "/proxy/#{path}" render text: 'ok' end 在我的nginxconfiguration中,我有这样的: location ~* ^/proxy/(.*?)/(.*) { internal; resolver 127.0.0.1; # Compose download url set $download_host $1; set $download_url http://$download_host/$2; # Set download request headers proxy_set_header Host $download_host; # Do not touch local disks when proxying content to clients proxy_max_temp_file_size 0; # Stream […]

用于反向代理NGINX的authentication/访问控制模块

我正在寻找一个模块,进行身份validation/访问控制反向代理(最好nginx )。 这个模块应该这样做: 1. user authentication using credential stored in database (such as postgres) 2. Monitoring the ongoing connection and take action if certain access credential is met. For example, time is expired 3. open source (allow customization) and nginx, ruby(rails) preferable. 看来, OpenResty与OpenResty可以完成这项工作。 这里有一篇关于nginx上的Lua访问控制的文章 。 下面是一个例子( nginx and Lua ),给我的印象是一段文件可以执行访问( access_by_lua_file ): server { […]

NGINX,Unicorn,Mediatemple DV服务器

任何人都试图在中介dv服务器上为其rails应用程序设置nginx和独angular兽? 你logging了吗?

我如何设置多个rails应用程序进行开发?

对于我目前正在使用的站点,我们有2个Rails 3.2项目。 一个项目基本上是一个API,另一个是Web前端。 为了在Web前端开发,我需要运行API项目。 我已经尝试使用领class和分包商的gem来pipe理这个,但它似乎并没有工作。 这两个项目都运行瘦应用程序服务器,并拥有自己的RVM gemset。 我们也在运行Nginx。 你将如何去pipe理这个设置的开发? 我想要有一个命令来启动一切,类似于福尔曼的工作方式。 要求: RVM支持 薄发展 我可以从API应用程序运行一个命令来启动这两个应用程序 不能使用战俘(它似乎总是挂起来,速度非常慢) 安装程序应该为其他开发人员使用最less的设置(轻松脚本) 适用于OSX 谢谢!