标签: ruby-on-rails

如何使用 Capistrano 在服务器上执行命令?

我有一个非常简单的任务叫做 update_feeds:

desc "Update feeds"
task :update_feeds do
  run "cd #{release_path}"
  run "script/console production"
  run "FeedEntry.update_all"
end
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行此任务时,都会收到以下消息:

[out :: mysite.com] sh: script/console: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想这是因为我不在正确的目录中,但正在尝试

run "cd ~/user/mysite.com/current"
Run Code Online (Sandbox Code Playgroud)

代替

run "cd #{release_path}"
Run Code Online (Sandbox Code Playgroud)

也失败了。手动(通过 ssh)运行完全相同的命令非常有效。为什么 capistrano 不能正确cd(更改目录)到站点目录来运行命令?

谢谢!

ssh deployment ruby-on-rails capistrano

3
推荐指数
2
解决办法
2万
查看次数

带有 Rails 3 环境的 Apache 乘客?

我正在通过 Apache Passenger 运行一个新的 Rails 3 应用程序,并尝试在stage环境中运行它。我根据文档和以前的 Apache 乘客应用程序正确设置了我的配置文件,但我无法让它在正确的环境中运行,即使我在我的 VirtualHost 配置中指定它:

RailsEnv stage
Run Code Online (Sandbox Code Playgroud)

有什么建议?

注意:如果重要的话,我使用的是 Ruby 1.9.2-p0

ruby-on-rails phusion-passenger apache-2.2

3
推荐指数
1
解决办法
1941
查看次数

Varnish 通常放在 Rails 网络堆栈中的什么位置?

我在 Unicorn 上部署了一个生产 Rails 应用程序,前面有 nginx 用于静态文件服务。我现在需要 Varnish 的一些功能,我想知道如何引入它。

有些人把 Varnish 放在前面,而有些人把 nginx 放在前面。我还没有听说有人使用Varnish 和 Unicorn,但我想这是有效的。

前面有 nginx 的人似乎是为了 gzip 和 SSL 终止而这样做的。SSL 与我的应用程序无关,但 gzip 是。我想清漆很快就会得到它,所以为了简单起见,我可以不用一段时间。

这两种方法还有其他优点/缺点吗?是否有规范的最佳实践布局?

nginx varnish reverse-proxy ruby-on-rails unicorn

3
推荐指数
1
解决办法
2494
查看次数

在 EC2 上设置 Rails 2.3.x 应用程序以实现轻松的可扩展性

我在一台专用机器上运行一个简单的 rails 堆栈。我们正在达到我们的全部容量并且完全没有扩展设置,只有一台机器上的一个应用程序。我做了一些研究,并提出了一个潜在的可扩展堆栈。我不是专业管理员,但我已经就我们应该如何使用 EC2 提出了一些想法。我仍然有点不确定文件系统共享,这是我的主要问题所在。首先,这是我要处理的。

当前堆栈:

  • 导轨 2.3.11
  • PostgreSQL
  • 乘客+nginx
  • 延迟作业
  • 狮身人面像+thinking_sphinx
  • imagemagick(重图像处理)
  • jaxer(将解释)

我们的应用程序的作用:

我们的应用程序使用 ImageMagick 执行大量图像上传和繁重的图像处理。它还与 jaxer 对话以进行冗长的画布到图像的转换。所有这些都在延迟工作中。我们想确保这些东西尤其可以扩展。所以我们谈论的是快速增长的文件存储需求和后台作业中繁重的图像处理。

到目前为止我的决定:

  • 使用 Rubber gem 帮助部署/管理
  • 从 delay_job 移动到 redis/resque,以便更轻松地解耦工作人员(客户端/服务器)、多个队列和 sinatra Web 界面
  • 有像 app、db、web、redis、resque 这样的角色,一开始所有的东西都在一个 ec2 实例上,但很快就把 redis/resque 的东西拆分成一个单独的实例,可能还有更多

问题:

主要的实际问题是:所有文件会发生什么?如果我决定将应用程序角色拆分为多个实例,如何获得共享文件系统访问权限?

此外,很高兴听到关于我的设置的一些想法。

scalability ruby-on-rails distributed-filesystems amazon-ec2

3
推荐指数
1
解决办法
1920
查看次数

Nginx 和 Unicorn 在不同的机器上

我有一个非常标准的 Rails 应用程序,可以在一个盒子上运行 Unicorn 和 Nginx。我想分离应用程序本身,并在一台机器上安装 Nginx,在另一台机器上安装 Unicorn(带有 Rails 应用程序)。这里的想法是我想在以后的 Unicorn 中添加另一个应用程序服务器,主要是为了一些轻负载平衡。

我可能是从错误的角度来解决这个问题的。这是正常的/可能的吗?如果是这样,有人可以指出我的示例配置或文档吗?

如果这不是要走的路,那么实现最终目标的正确途径是什么?我已经研究过 HAProxy,但在阅读了一些 Nginx/Unicorn 文档后,我了解到无需任何其他软件即可实现这一点。

nginx load-balancing ruby-on-rails unicorn

3
推荐指数
1
解决办法
1678
查看次数

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

我有一台debian服务器,需要从一个托管服务提供商转移到另一个托管服务提供商。我真的不知道旧服务器是如何设置的,我只知道它正在运行一个Ruby on Rails安装了大量自定义库的应用程序,我应该为痛苦的迁移做好准备。

旧服务器:
-os:debian 5.0.9
-使用的磁盘空间:-3.2GB
架构:i686

新服务器:
-os:debian 5.0.9
-可用磁盘空间:-10GB
架构:x86_64

如您所见,问题在于服务器运行不同的架构。

问:无论如何我可以通过几个步骤将旧服务器迁移到新服务器(或者我只是梦想我可以)?

我在想也许我可以: -
获取旧服务器上安装的软件包和 gem 列表,并使用 for 循环将它们全部安装在
新服务器上 - 将磁盘内容从旧服务器复制到新服务器,同时排除特定于体系结构的内容(问题是我真的不知道要排除什么)。

debian migration ruby-on-rails 32bit-64bit

3
推荐指数
1
解决办法
389
查看次数

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

我有一个系统,它必然需要在三个或更多不同的位置物理存在,我需要关于以这样一种方式构建的建议,以便我的数据库保持及时复制而不会出现可怕的延迟。我已经看到当应用程序服务器试图与一个物理上没有并置的节点通信时,mysql 访问和复制非常慢。在这种情况下,我使用的是 mongodb。

  • 堆栈是 linux/passenger/ruby/rails/mongodb。
  • 数据库写重读轻。
  • 基础设施是 Amazon EC2
  • 应用层必须在物理上位于 3 个或更多不同的位置。我无法证明这个要求比它是一个要求更合理。但是,如果可以从其他位置快速写入数据库,则该数据库不必位于多个位置。

从阅读 mongo 的文档来看,mongo 复制似乎比分片 b/c 更像是一个候选者,我的数据存储并不大。但是,我没有看到任何可以解决具有潜在高延迟的远距离通信的服务器速度问题的方法。

replication infrastructure ruby-on-rails amazon-ec2 mongodb

3
推荐指数
1
解决办法
1020
查看次数

nginx 条件接受标头

一些移动设备向我们的服务器发送以下不正确的请求:

GET / HTTP/1.0
Accept:
User-Agent : xxx
Run Code Online (Sandbox Code Playgroud)

空的 Accept 头会导致我们的 Ruby on Rails 服务器返回 500 错误。

在 Apache 中,以下指令允许我们在将标头发送到应用程序 RoR 服务器之前重写标头,以处理损坏的设备:

    RequestHeader edit Accept ^$ "*/*" early
Run Code Online (Sandbox Code Playgroud)

我们目前正在设置 nginx,但事实证明,实现相同的解决方法很困难。我们能够设置:

  proxy_set_header Accept */*;
Run Code Online (Sandbox Code Playgroud)

然而,这似乎必须无条件地完成。每当尝试做:

if ($http_accept !~ ".") {
  proxy_set_header Accept */*;
}
Run Code Online (Sandbox Code Playgroud)

它抱怨消息:

"proxy_set_header" directive is not allowed here
Run Code Online (Sandbox Code Playgroud)

那么,使用 nginx,我们如何*/*在将请求发送到应用服务器之前将HTTP Accept 标头设置为空?

nginx http-headers ruby-on-rails

3
推荐指数
1
解决办法
3157
查看次数

这个日志是什么意思?

当我的应用程序正在运行(有大量流量)时,我在错误日志中看到了这一点,但我什至不明白它是关于什么的。我想它正在优化一些配置,但我需要更正式的解释。

App 13214 stderr: Trying:
App 13214 stderr:   zc = 9  zm = 9  zs = 0  f = 0
App 13214 stderr:       IDAT size = 5698
App 13214 stderr:   zc = 9  zm = 8  zs = 0  f = 0
App 13214 stderr:       IDAT size = 5698
App 13214 stderr:   zc = 9  zm = 9  zs = 1  f = 0
App 13214 stderr:       IDAT size = 5561
App 13214 stderr:   zc = 9  zm = 8 …
Run Code Online (Sandbox Code Playgroud)

ubuntu ruby-on-rails phusion-passenger

3
推荐指数
1
解决办法
304
查看次数

全新安装 nginx 和 ROR 后出现“768 worker_connections are notough”错误

我在 Rails 上全新安装了 nginx 和 ruby​​。但在测试时它给了我一个“500 内部服务器错误”。

\n\n

我的应用程序的 error.log 具有以下内容:

\n\n
2014/05/01 17:27:15 [alert] 1423#0: *6892 768 worker_connections are not enough while connecting to upstream, client: 24.15.27.113, server: example.com, request: "GET / HTTP/1.0", upstream: "http://24.15.27.113:80/", host: "myapp"\n2014/05/01 17:27:16 [alert] 1423#0: *7656 768 worker_connections are not enough while connecting to upstream, client: 24.15.27.113, server: example.com, request: "GET /favicon.ico HTTP/1.0", upstream: "http://24.15.27.113:80/favicon.ico", host: "myapp"\n2014/05/01 17:45:50 [alert] 1453#0: *766 768 worker_connections are not enough while connecting to upstream, client: 24.15.27.113, server: example.com, …
Run Code Online (Sandbox Code Playgroud)

ubuntu nginx ruby-on-rails thin

3
推荐指数
1
解决办法
2万
查看次数