Articles of ruby on rails

Rails / Mongo跨越多个不同的地理区域

我有一个必要的系统,需要在三个或更多的不同位置的物理存在,我需要build立在这样一种方式,我的数据库保持及时复制没有可怕的延迟的build议。 我看到,当应用程序服务器试图与没有物理configuration的节点对话时,mysql访问和复制的速度非常慢。 在这种情况下,我正在使用mongodb。 这个堆栈是linux / passenger / ruby​​ / rails / mongodb。 数据库写入重读光。 基础设施是亚马逊EC2 应用程序层必须位于3个或更多不同的位置。 我不能certificate这一要求超出了要求。 但是,如果数据库可以从其他位置快速写入,则不需要位于多个位置。 从阅读mongo的文档,mongo复制看起来更像是一个候选人而不是分区b / c,我的数据存储区不是很大。 但是,我没有看到任何解决远距离服务器通信速度问题的可能性很高的问题。

在Heroku上需要将WP Blog与Rails App联系起来

我有一个客户想要将他的Rails应用程序迁移到Heroku。 然而,客户端也有一个博客与他在WordPress上运行的域相关联。 目前,WordPress博客与Rails应用程序一起运行愉快,但一旦我们迁移到Heroku,显然是不可能的。 该应用程序的url就像http://mydomain.com ,博客的url就像http:// mydomain / blog 。 我意识到最好的长期解决scheme是用Toto或Jekyll这样的Rails格式来重做博客。 但在短期内,继续托pipeWP博客的最佳方式是在哪里(或某处)使用Heroku来运行应用程序? 客户不希望博客是在一个子域,但留在mydomain /博客出于search引擎优化的原因,也有stream量到博客。 我有两个想法: 在旧的(非Heroku)服务器上使用rack_rewrite或折射(或者只是一个普通的老式的301和Apache mod_rewrite)来将主站点从旧站点redirect到Heroku。 在这种情况下,我可以离开Wordpress博客愉快地运行。 我认为?? 如果我这样做,是否有理由select其中一个选项(rack_rewrite,refraction或mod_rewrite)? 切换DNS信息指向Heroku站点,然后使用从博客301redirect到旧站点。 但是,我必须得到一个子域的旧(非Heroku)网站,并使用某种重写规则,所以它看起来不是一个子域。 这两种方法中的哪一种都更可取,还是有另外一种方法可以做到这一点,我更容易失踪?

在Varnish VCL中忽略GET参数

好的:我已经build立了一个站点,其中有一些我们向开发人员公开的API,它们是这种格式的 /api/item.xml?type_ids=34,35,37&region_ids=1000002,1000003&key=SOMERANDOMALPHANUM 在这个URI中,type_ids总是被设置的,region_ids和key是可选的。 重要的是要注意的是,关键variables不影响响应的内容。 它用于对请求进行内部跟踪,以便我们可以识别出请求缓慢或不需要的人员。 在Varnish中,我们有这样一个VCL: if (req.http.host ~ "the-site-in-question.com") { if (req.url ~ "^/api/.+\.xml") { unset req.http.cookie; } } 我们只是删除cookie,让后端完成剩下的工作(这是Rails / authlogic用API响应发送会话cookie的方法)。 目前,任何不同的开发人员基本上都会碰到不同的caching,因为&key=SOMEALPHANUM被认为是用于存储的Varnish散列的一部分。 这显然不是一个很好的解决scheme,我正在努力解决如何告诉Varnish忽略URI的那部分。

Nginx和Unicorn在单独的机器上

我有一个非常标准的Rails应用程序与Unicorn和Nginx一起运行。 我想拆分应用程序本身,并在另一台机器上使用Nginx,在另一台机器上使用Unicorn(使用Rails应用程序)。 这里的想法是,我想在将来以后再添加与Unicorn的应用程序服务器,主要是为了一些轻负载平衡。 我可能从错误的angular度来解决这个问题。 这是正常的/可能的吗? 如果是这样,有人可以指向我的例子configuration或文档? 如果不是要走的路,那么实现最终目标的正确途径是什么? 我已经研究过HAProxy,但是在阅读了一些Nginx / Unicorn文档后,我发现没有任何额外的软件就可以实现这一点。

当从外部IP地址访问时,chef-server-webui会话不工作

我已经在Ubuntu 12.10系统上使用官方的.deb软件包安装了chef-server 。 安装完成后,我运行 chef-server-ctl test 哪个成功报告, 0失败。 服务器(Amazon EC2实例)具有1个networking接口,其中有一个内部地址分配给它。 假设IP地址是10.223.92.58而hostname -f返回类似于: ip-10-223-92-58.eu-west-1.compute.internal 但是,AWS EC2允许使用53.242.31.23或DNS ec2-53-242-31-23.eu-west-1.compute.amazonaws.com从Internet访问服务器。 为了允许通过公共DNS名称访问,我在/etc/chef-server/chef-server.rb添加了以下几行: lb[:enable] = "false" lb[:web_ui_fqdn] = "ec2-53-242-31-23.eu-west-1.compute.amazonaws.com" nginx[:server_name] = "ec2-53-242-31-23.eu-west-1.compute.amazonaws.com" nginx[:url] = "https://ec2-53-242-31-23.eu-west-1.compute.amazonaws.com" nginx[:enable_non_ssl] = "true" 我可以使用https://ec2-53-242-31-23.eu-west-1.compute.amazonaws.com访问服务器并进入login页面。 login页面会将我(login成功后)redirect到用户编辑页面,以便更改我的密码。 (这是devise)。 问题: redirect到用户编辑页面将不起作用,因为用户控制器(或其他控制器)会抱怨一个不存在的会话,并将我重新定向到login页面。 如果我尝试从本地DNS域名或IP访问该页面,则问题不存在。 我是否缺less一些configuration值?

使用Nginx解释负载均衡,就像我五点一样

我发现了大量的DIY文章和教程,介绍如何使用上游服务器将Nginxconfiguration为负载平衡器: upstream backend { ip_hash; server 1.2.3.4; server 1.2.3.5; server 1.2.3.6; } server { location / { proxy_pass http://backend; } } 但是就configuration这个架构而言,这是我能find的程度。 目前我有一个rails应用程序部署到3后端VPS服务器,我使用Unicorn为我的HTTP服务器。 我是否需要在我的负载平衡服务器上安装ruby以及我的Rails应用程序和独angular兽? 我需要在每台上游服务器上安装Nginx吗? 如果是这样,我该如何configuration它们? 如果我在build筑中引入像光油这样的东西,那会怎样呢? 在负载平衡器或每个后端之前? 以下是我如何组织一切的视觉: +—> backend1 <—+ | | [requests] <—> [Nginx load-balancer]-+—> backend2 <—+-[Database server] | | +—> backend3 <—+

托pipe成本过高

我的一个客户正在收取约$ 1400每月托pipe。 然而,该网站每天平均只有大约200次点击,并且没有大文件和video。 它是由http://www.engineyard.com/托pipe的,我查看了账单和“标准支持标准CPU超大实例使用”function,每个月的价格为833美元,另外还有大量的其他订单项。 我不知道如何服务这样一个小型网站可能会消耗如此巨大的成本 – 任何人有任何经验/想法呢? 更新: 另外什么是“标准支持标准CPU超大实例使用率”,究竟是什么?

在EC2上设置Rails 2.3.x应用程序,以便于扩展

我正在一台专用机器上运行一个简单的铁轨堆栈。 我们达到了我们的全部容量,并且完全没有缩放的设置,只有一台机器上只有一个应用程序。 我做了一些研究,并提出了一个可扩展性的潜在堆栈。 我不是专业pipe理员,但是我已经就如何处理EC2做了一些想法。 我仍然对文件系统共享有些不确定,这是我的主要问题。 首先,这是我正在处理的。 当前堆栈: 铁轨2.3.11 PostgreSQL的 乘客+ nginx的 delayed_job的 sphinx + thinking_sphinx imagemagick(沉重的image processing) 雅克(将解释) 我们的应用程序的function 我们的应用程序使用ImageMagick进行大量的图像上传和繁重的image processing。 它还与jaxer讨论冗长的canvas-to-image转换。 所有这一切都在延迟工作。 我们希望确保这个东西可以特别扩展。 所以我们正在谈论快速增长的文件存储需求和后台作业中的繁重image processing。 我迄今的决定: 使用橡胶gem帮助部署/pipe理 从delayed_job移动到redis / resque,以方便工作者(客户端/服务器),多个队列和sinatra Web界面的解耦 起初有一些ec2实例的应用程序,db,web,redis,resque等angular色,但是很快将redis / resque分成了单独的实例,可能更多的是 问题: 主要的实际问题是:所有的文件会发生什么? 如果我决定将应用程序angular色分成多个实例,那么如何获得共享的文件系统访问权? 另外,听到关于我的设置的一些想法总是很棒的。

需要将debian服务器从i686移到x86_64架构

我有一个debian服务器,我需要从一个托pipe提供商移动到另一个。 我真的不知道如何设置旧的服务器,我只知道它正在运行一个Ruby on Rails应用程序,并安装了很多自定义库,我应该为自己的迁移做好准备。 旧服务器: -os: debian 5.0.9 使用的磁盘空间: 3.2GB build筑: i686 新服务器: -os: debian 5.0.9 – 免费磁盘空间: 10GB 架构: x86_64 正如你所看到的问题是服务器运行不同的体系结构。 问:无论如何,我可以通过几个步骤将旧的服务器迁移到新的服务器上(或者我只是在做梦)。 我在想也许我可以: – 获取旧服务器上安装的软件包和gem的列表,并使用for循环将其全部安装到新的服务器上 – 将磁盘内容从旧服务器复制到新服务器,同时排除特定于体系结构的问题(问题是我真的不知道要排除什么)。

如何使用Nginx和Passenger设置代理caching

我使用Nginx和Passenger作为我的Rails应用程序。 我想使用代理caching来caching我的网页。 但是,每个请求都直接导入到我的rails应用程序中。 我不知道我的configuration有什么问题。 以下是我的configuration: user www-data; worker_processes 1; events { worker_connections 1024; } http { passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15; passenger_ruby /usr/bin/ruby1.8; passenger_max_pool_size 6; passenger_max_instances_per_app 1; passenger_pool_idle_time 0; rails_spawn_method conservative; include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 512; sendfile on; #tcp_nopush on; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_http_version 1.0; gzip_vary on; gzip_comp_level 6; gzip_proxied any; gzip_types text/plain text/css […]