标签: ruby-on-rails

从 capistrano 部署创建一个 docker 容器

我在理解如何在 Docker 中利用我现有的基础架构代码时遇到了一些困难。

我有一个 Ruby on Rails 应用程序,它使用 capistrano 推出部署。我想使用这个 capistrano 脚本来创建一个新的 docker 镜像。我可以推出一个部署,然后使用部署到目录部署在现有映像之上,例如精确(因为它与我的目标操作系统匹配)。

这是正确的方法还是我错过了什么?

deployment ruby-on-rails capistrano docker

6
推荐指数
1
解决办法
2061
查看次数

如何为 VirtualHost 设置 mod_auth_cas?

我有以下内容/etc/apache2/httpd.conf

Include /private/etc/apache2/passenger_pane_vhosts/*.conf
Run Code Online (Sandbox Code Playgroud)

我有以下内容/etc/apache2/passenger_pane_vhosts/my_site.conf

LoadModule auth_cas_module /usr/libexec/apache2/mod_auth_cas.so
CASCookiePath /tmp/mod_auth_cas/
CASVersion 2
CASDebug on
CASValidateServer off
CASAllowWildcardCert on
CASTimeout 86400
CASIdleTimeout 7200
CASLoginURL https://cas.mycompany.com/cas/login
CASValidateURL https://cas.mycompany.com/cas/serviceValidate
CASCookieDomain hattip-dev.mitre.org

LogLevel debug

<VirtualHost *:80>
  LogLevel debug
  ServerName hattip.local
  DocumentRoot "/path/to/rails_app/public"
  RailsEnv development
  <Location />
    AuthType CAS
    AuthName "MyCompany CAS"
    CASAuthNHeader MOD_AUTH_CAS_USER
    require valid-user
  </Location>
  <directory "/path/to/rails_app/public">
    Order allow,deny
    Allow from all
  </directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

Apache 将正常启动,但对我的 Rails 应用程序的每个请求都会返回 403,而不会重定向到我的 CAS 服务器。有一个在日志中没有CAS相关信息,即使CASDebugonLogLeveldebug无处不在,我能想到来设置。

PS:我已经尝试了上述配置的一些变体,包括将 …

ruby-on-rails phusion-passenger cas apache-2.2

5
推荐指数
1
解决办法
9728
查看次数

Apache mod_proxy 到另一台服务器

我在 Apache2 中使用 proxy_balancer 将 Rails 应用程序的请求代理到应用程序运行所在端口上的 Rails 服务器。这是它的设置方式...

在端口 8000 上运行的Rails Server Mongrel,当直接访问 url 到http://rails_server:8000 时,站点加载正常

该站点的Apache 服务器Conf 文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName myserver.com
    ServerAlias application.myserver.com

    <Proxy balancer://application_cluster>
            Allow from localhost
            BalancerMember http://ip.to.server:8000 retry=10
    </Proxy>

    ProxyPass / balancer://application_cluster
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是去http://rails_server:8000工作正常,但去http://application.myserver.com加载正确的内容,但将所有 HTML 显示为文本,而不是将其呈现为 html

ubuntu proxy load-balancing ruby-on-rails apache-2.2

5
推荐指数
1
解决办法
980
查看次数

如何确定服务器的最佳 ruby​​ Thin/mongrel 实例数量、核心数量?

我们正在尝试在机器上部署 mongrel 实例。服务器的最佳杂种实例数是多少?由于实例可以处理并发连接,我认为每个内核启动超过 1 个没有任何好处。除此之外,线程只会争夺 CPU。我们的前辈已经为4核分配了10个实例,但我认为这只会导致CPU争用。任何明确的答案/意见?

我见过这个问题:有多少个杂种实例?

但确实不够具体。

mongrel ruby-on-rails mongrel-cluster thin

5
推荐指数
1
解决办法
1527
查看次数

如何使用 Nginx 和 Passenger 设置代理缓存

我在 Rails 应用程序中使用 Nginx 和 Passenger。我想使用代理缓存来缓存我的页面。但是,每个请求都会直接发送到我的 Rails 应用程序。我不知道我的配置有什么问题。下面是我的配置:

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 text/javascript application/javascript    application/json application/x-javascript text/xml application/xml application/xml+rss;

    proxy_cache_path  /var/www/cache/webapp levels=1:2 keys_zone=webapp:8m max_size=1000m inactive=600m;
    include vhosts/*.conf;

    include /opt/nginx/conf/sites-enabled/*;

    root    /var/www;
}


server { …
Run Code Online (Sandbox Code Playgroud)

nginx ruby-on-rails phusion-passenger

5
推荐指数
1
解决办法
2308
查看次数

Nginx 和乘客 - 连接到上游时失败(11:资源暂时不可用)

我有一个被证明有问题的 Nginx 和乘客设置。

在相对较低的负载下,服务器似乎得到了备份并开始将这样的结果搅拌到 error.log 中:

connect() to unix:/passenger_helper_server failed 
(11: Resource temporarily unavailable) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)

我的乘客设置是:

passenger_min_instances 2;
passenger_pool_idle_time 1200;
passenger_max_pool_size 20;
Run Code Online (Sandbox Code Playgroud)

我已经做了一些挖掘,看起来 CPU 被钉住了。内存使用情况似乎很好,passenger_memory_stats 显示最多使用了大约 700MB,但 CPU 接近 100%。

这足以导致此类错误吗?

我应该减少游泳池的大小吗?我应该查看其他配置设置吗?

任何帮助表示赞赏

其他相关信息:

  • Amazon EC2 小型实例
  • Ubuntu 10.10
  • Nginx(最新稳定版)
  • 乘客(最新稳定版)
  • 导轨 3.0.4

ubuntu tuning nginx ruby-on-rails phusion-passenger

5
推荐指数
1
解决办法
4551
查看次数

应如何将秘密文件推送到 EC2(在 AWS 上)Ruby on Rails 应用程序?

应如何使用亚马逊 Web 服务及其弹性 beanstalk 将秘密文件推送到 EC2 Ruby on Rails 应用程序?

我将文件添加到 git 存储库,然后推送到 github,但我想将秘密文件保留在 git 存储库之外。我正在使用以下方式部署到 aws:

git aws.push
Run Code Online (Sandbox Code Playgroud)

以下文件位于 .gitignore 中:

/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)

通过此链接,我尝试将 S3 文件添加到我的部署中: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html

引用该链接:

示例片段

以下示例从 Amazon S3 存储桶下载 zip 文件并将其解压到 /etc/myapp 中:

sources:  
    /etc/myapp: http://s3.amazonaws.com/mybucket/myobject 
Run Code Online (Sandbox Code Playgroud)

按照这些指示,我将文件上传到 S3 存储桶,并将以下内容添加到.elasticbeanstalk .ebextensions 目录中的 private.config 文件中:

sources:
  /var/app/current/: https://s3.amazonaws.com/mybucket/config.tar.gz
Run Code Online (Sandbox Code Playgroud)

该 config.tar.gz 文件将提取到:

/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)

但是,部署应用程序时,永远不会复制或提取 S3 主机上的 config.tar.gz 文件。我仍然收到无法找到 database.yml 的错误,并且 EC2 日志没有配置文件的记录,这是错误消息:

Error message:
  No such file or directory - /var/app/current/config/database.yml
Exception class:
  Errno::ENOENT …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 ruby ruby-on-rails amazon-ec2 amazon-web-services

5
推荐指数
1
解决办法
3706
查看次数

Elastic Beanstalk Rails - 修改乘客配置passenger_max_pool_size

我需要增加在乘客上运行的 Rails 应用程序的passenger_max_pool_size。我已经使用 Elastic beanstalk 进行部署。任何想法,如何解决这个问题?是否有选项设置或容器命令来执行此操作

ruby-on-rails phusion-passenger amazon-web-services

5
推荐指数
1
解决办法
1454
查看次数

预填充 vagrant 同步文件夹内容

我目前正在构建一个相当复杂的服务器堆栈(一个 ruby​​ on rails 应用程序),我希望开发人员能够在不必自己安装所有东西的情况下工作。因此我使用 Vagrant 来允许他们这样做。

这个想法是,当您第一次安装映像时,它将拉取最新的源并安装依赖项,源通过同步文件夹公开(vagrant 内置功能),以便开发人员可以提交源并在他们自己的环境中编辑它们。Vagrant-box 仅用于服务器。

Vagrantfile 中的同步文件夹条目:

config.vm.synced_folder "gameeso/", "/var/gameeso", :create => "true" 
Run Code Online (Sandbox Code Playgroud)

该图像是一个带有 upstart 脚本的 Ubuntu 服务器(脚本在启动时执行,并且仅在 Internet 连接启动时执行):

  • 从 Github 拉取最新的开发分支(如果文件夹不存在)

  • 安装依赖项(这是由脚本完成的)

  • 启动服务器

所有这些都发生在一个同步文件夹中。我对这种方法有一些问题,主要是 Vagrant 清除了我的来宾系统上的同步文件夹。 我通过在 upstart 脚本中添加 'sleep 10' 解决了这个问题,所以它可以等到 Vagrant 设置同步文件夹。

当然,这不是一种安全的方法(如果启动时间超过 10 秒,虽然现在不太可能,我宁愿不知道;))

我的问题是:有没有更好的方法让来宾主机(流浪者图像)填充同步文件夹?

当然,非常感谢提前!

ubuntu ruby-on-rails upstart vagrant

5
推荐指数
1
解决办法
1225
查看次数

独角兽工人间歇性超时

我似乎无缘无故地从独角兽工人那里得到间歇性超时,我需要一些帮助来调试实际问题。更糟糕的是,它可以处理大约 10 - 20 个请求,然后 1 个将超时,然后再有 10 - 20 个请求,同样的事情将再次发生。

我创建了一个开发环境来说明这个特定问题,所以除了我的之外没有任何流量。

堆栈是 Ubuntu 14.04、Rails 3.2.21、PostgreSQL 9.3.4、Unicorn 4.8.3、Nginx 1.6.2。

问题

我将详细描述它不起作用的时间。

我通过浏览器请求一个 url。

Started GET "/offers.xml?q%5bupdated_at_greater_than_or_equal_to%5d=2014-12-28T18:01:16Z&q%5bupdated_at_less_than_or_equal_to%5d=2014-12-28T19:30:21Z" for 127.0.0.1 at 2014-12-30 15:58:59 +0000
Completed 200 OK in 10.3ms (Views: 0.0ms | ActiveRecord: 2.1ms)
Run Code Online (Sandbox Code Playgroud)

如您所见,请求在 10.3 毫秒内成功完成,响应状态为 200。

然而,浏览器挂了大约 30 秒,Unicorn 杀死了工人:

E, [2014-12-30T15:59:30.267605 #13678] ERROR -- : worker=0 PID:14594 timeout (31s > 30s), killing
E, [2014-12-30T15:59:30.279000 #13678] ERROR -- : reaped #<Process::Status: pid 14594 SIGKILL (signal 9)> worker=0
I, [2014-12-30T15:59:30.355085 #23533] …
Run Code Online (Sandbox Code Playgroud)

nginx ruby-on-rails unicorn ubuntu-14.04

5
推荐指数
1
解决办法
3141
查看次数