我们使用 Nginx 作为 Rails 应用程序的负载均衡器。由于我们正在转向多云托管解决方案,我们希望我们的负载均衡器在将请求转发到前端时开始对每个连接使用 SSL,因为其中一些可能会通过 Internet。
我面临的问题是非 https 页面创建了一个重定向循环。这似乎是由于 X-Forwarded-Proto 标头设置不正确造成的。因此,当 rails 在 http 上收到一个请求时,它认为它是一个 https 请求,即使它不是,所以它会将它重定向到 http,并认为它是一个 https 请求等等。
没有多少谷歌搜索帮助我解决这个问题。所以我想知道:
谢谢!
user www-data;
worker_processes 2;
events {
worker_connections 1024;
use epoll;
}
http {
passenger_root /opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-3.0.2;
passenger_ruby /opt/ruby-enterprise/bin/ruby;
passenger_pool_idle_time 0;
passenger_max_pool_size 20; # Over all apps
passenger_min_instances 5; # Over each app
passenger_use_global_queue on;
rails_env production;
include mime.types;
default_type application/octet-stream;
log_format main '"$remote_addr", "$remote_user", "$time_local", "$request", '
'"$uid_got", "$uid_set", "$status", "$body_bytes_sent", "$http_referer", ' …Run Code Online (Sandbox Code Playgroud) 好吧,这是在融化我的大脑。这可能与我不太了解 Upstart 的事实有关。很抱歉,这个问题很长。
我正在尝试使用 Upstart 来管理 Rails 应用程序的 Unicorn 主进程。这是我的当前/etc/init/app.conf:
description "app"
start on runlevel [2]
stop on runlevel [016]
console owner
# expect daemon
script
APP_ROOT=/home/deploy/app
PATH=/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:$PATH
$APP_ROOT/bin/unicorn -c $APP_ROOT/config/unicorn.rb -E production # >> /tmp/upstart.log 2>&1
end script
# respawn
Run Code Online (Sandbox Code Playgroud)
这工作得很好 - 独角兽开始很棒。不好的是,检测到的 PID 不是 Unicorn master 的,而是一个sh进程。这本身也不是那么糟糕 - 如果我没有使用自动独角兽零停机部署策略。因为在我发送-USR2给我的独角兽主人后不久,一个新主人出现了,而旧主人死了……这个sh过程也是如此。所以 Upstart 认为我的工作已经死了,如果我愿意,我不能再用它重新启动restart或停止它stop。
我玩过配置文件,尝试将 -D 添加到 Unicorn 行(如下所示$APP_ROOT/bin/unicorn -c $APP_ROOT/config/unicorn.rb -E production -D:)来守护 Unicorn,然后我添加了该expect daemon …
我目前正在研究 Ruby/Ruby on Rails 作为 Python/Django 的替代品。我的主要问题是,在 Linux 上安装 Ruby gems 和/或 Ruby on Rails 项目时,特别是一般的 dist 或 Gentoo 的最佳实践是什么还不清楚。
在 Gentoo 中,开发人员倾向于打包 gem。这是通过 portage 而不是 gem 安装它们的首选方式。但是我不知道这是否是正确的方法,因为您将始终缺少主要项目及其依赖项,您要么必须为其编写自己的 ebuild(没什么大不了的)并对其进行维护。那时我看不到任何更多优势,因为一旦我编写了自己的 ebuild,我就必须密切关注包以进行新的开发,因为包不会有任何神奇的颠簸。:-) 此外,Ruby 世界是一个快速移动的目标,并不是 dist 树中的所有打包 gem 都真正跟上速度。
另一方面,直接通过 Bundler 或直接通过 gem 包管理器安装似乎也有点不稳定。如果您不小心,您会绕过 diss 包管理器并有两个相互竞争的管理器。例如,dist 更新到 Ruby 1.9.4 并引入了一些特定于 dist 的特性和一些 gems 意外损坏。然而,他们为它修补了自己的包装宝石。或者,如果您使用 Bundler,项目在其依赖项的版本方面往往相当严格,因此,即使某个依赖项的安全更新可用,您也可能无法获得它,因为该项目明确指定了一个版本。所以你必须再次手动跳入。
现在,我很感激社区对处理此类事情的正确方法 (TM) 以及如何在生产服务器上正确维护 Ruby/Ruby on Rails 基础和多个项目(包括第三方项目)的意见。
请注意,这不是关于如何部署项目/应用程序。这是关于维护的最佳实践...
在rvmCentOS 5.8 上安装后:
[rails@localhost ~]$ rvm -v
rvm 1.16.17
[rails@localhost ~]$ which ruby
~/.rvm/rubies/ruby-1.9.3-p286/bin/ruby
[rails@localhost ~]$ ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
[rails@localhost ~]$ which gem
~/.rvm/rubies/ruby-1.9.3-p286/bin/gem
Run Code Online (Sandbox Code Playgroud)
有一个警告:
$ gem -v
/home/rails/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
1.8.24
Run Code Online (Sandbox Code Playgroud)
我遵循了一些建议:
$ rvm pkg install libyaml
Fetching yaml-0.1.4.tar.gz to /home/rails/.rvm/archives
Extracting yaml-0.1.4.tar.gz to /home/rails/.rvm/src
Prepare yaml in …Run Code Online (Sandbox Code Playgroud) 我有一台几个月前配置的机器。RVM 用于安装 ruby 1.9.3-p125 以及 1.9.3-p125-perf。当我将未加工的红宝石性能与另一台相同的机器进行比较时,较旧的机器抽了它们。
例如:
================================================================================
With in-block needle calculation
================================================================================
Rehearsal ----------------------------------------------
detect 3.790000 0.000000 3.790000 ( 3.800895)
each 2.410000 0.000000 2.410000 ( 2.420860)
any 3.960000 0.000000 3.960000 ( 3.972099)
include 1.440000 0.000000 1.440000 ( 1.442862)
------------------------------------ total: 11.600000sec
Run Code Online (Sandbox Code Playgroud)
对比
================================================================================
With in-block needle calculation
================================================================================
Rehearsal ----------------------------------------------
detect 10.740000 0.000000 10.740000 ( 10.769366)
each 6.080000 0.010000 6.090000 ( 6.106323)
any 10.600000 0.000000 10.600000 ( 10.641606)
include 4.160000 0.000000 4.160000 ( 4.171530)
------------------------------------ total: 31.590000sec
Run Code Online (Sandbox Code Playgroud)
我试图在快速机器上使用 rvm …
我刚开始使用 Monit 并且没有很多系统知识。我有一个在Puma 上运行的 Ruby 应用程序。如果 Puma 死机,我想使用 Monit 自动重新启动它。我目前正在使用Puma 提供的 Capistrano 2 配方,它使用控制脚本而不是将 PID 输出到文件。
有没有办法配置monit来检查Puma的状态看是否应该重启?
自上次 Fusion Passenger 更新以来,我所有的 Sinatra 应用程序都停止在以下环境中工作:Apache (2.4.17)、Phusion Passenger (5.0.21)。在更新乘客中间件之前,一切都按预期工作。
问题是,当我请求我的 vhost的 url ( https://myapp.ch )时,apache 目录正试图进入公共目录的列表。
ODD 部分:如果请求在 Sinatra 控制器中定义的路由(即:https : //myapp.ch/infos),则启动乘客并按预期提供请求的页面。
这是虚拟主机部分:
<VirtualHost *:443>
DocumentRoot /home/user1/sinatra/app1/public
ServerName myapp.ch
<Directory /home/user1/sinatra/app1/public>
AllowOverride all
Order allow,deny
Allow from all
Options -MultiViews
Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)
配置文件
# encoding: UTF-8
require 'rubygems'
require 'sinatra'
require File.expand_path '../start.rb', __FILE__
run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)
请求 Sinatra 应用 (/) 的根目录时出现 Apache 日志错误:
[Mon Oct 26 22:10:30.728795 2015] [autoindex:error] [pid 3535:tid 140103510914816] [client 176.127.182.162:50956] AH01276: Cannot …Run Code Online (Sandbox Code Playgroud) 我正在使用乘客/Apache 2.2 在我的服务器上运行 redmine(一个 RoR 应用程序)。乘客和红宝石使用太多内存。
有没有更有效的内存方式来运行 redmine/ruby?
我只需要支持六个 redmine 用户。我想继续使用 Apache,但我愿意接受所有不是“使用 nginx/lighttpd”的建议。
(以下数据来自 512MB VPS,所以 Ruby 使用超过 128MB 仅用于 redmine)
user ....... %mem ....... process
-----------------------------------
www-data ... 13.6 0:00.65 ruby1.8
www-data ... 12.2 0:04.86 ruby1.8
www-data ... 9.4 0:04.15 apache2
www-data ... 9.0 0:13.94 apache2
www-data ... 3.2 0:00.27 apache2
root ... 2.5 0:00.23 apache2
root ... 1.9 0:01.19 ruby1.8
Run Code Online (Sandbox Code Playgroud)
那么,有什么比乘客更好的呢?
谢谢你的想法!!
我想看看如何配置 Nginx 和 Varnish。
我正在运行多个 PHP 站点和 Rack-Sinatra 站点作为跨两个 IP 的虚拟主机。我想防止 Nginx 不得不提供静态文件,因为我注意到一些延迟。
编辑:我已更改为 Nginx,但提供的答案很容易移植到 nginx。
我尝试安装 Phusion Passenger,由于我的可用内存少于 1GB,因此建议使用以下命令临时添加交换空间:
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap
Run Code Online (Sandbox Code Playgroud)
乘客安装成功,所以我现在必须禁用该交换空间 - 如何?它没有说明任何有关恢复的内容,但我认为应该这样做,因为它说“暂时添加交换空间”。我现在如何取消这种效果?