标签: puma

为什么Puma只绑定到tcp6?(通过`rails s`)

全新生成的Rails 4.2.0项目.Ran rails s,使用WEBrick表现得如预期:

vagrant@web1:~$ netstat -nlpt
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      27158/ruby2.1   
tcp6       0      0 ::1:3000                :::*                    LISTEN      27158/ruby2.1   
Run Code Online (Sandbox Code Playgroud)

添加puma到Gemfile,运行bundle,然后rails s再次; 想出了Puma,但只绑定了tcp6接口,而不是tcp:

vagrant@web1:~$ netstat -nlpt
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 ::1:3000                :::*                    LISTEN      27116/ruby2.1   
Run Code Online (Sandbox Code Playgroud)

有什么线索的原因?我一直在谷歌搜索没有运气.

更新:

跑步puma -b tcp://0.0.0.0:3000工作.但是,将bind指令添加到config/puma.rb并运行rails s不会:

bind 'tcp://0.0.0.0:3000'
Run Code Online (Sandbox Code Playgroud)

然而,我的配置文件中的threads/workers指令正在工作,因此我知道配置文件正在加载和使用.(甚至添加了一个put语句以确定.)

如果我只是运行puma,绑定到正确的接口,配置文件甚至会被拾取.我可能只需要运行puma而不是rails s,尽管它很烦人,必须添加到我的开发人员文档中.

UPDATE2:

我误解了.运行 …

ruby-on-rails ipv6 puma

9
推荐指数
1
解决办法
2123
查看次数

Puma和Nginx 502 Bad Gateway错误(Ubuntu Server 14.04)

我需要部署我的rails应用程序,所以我从这里开始执行所有步骤,https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx -酮的ubuntu-14-04

但是教程结束时,我收到此错误 - >"502 Bad Gateway"

编辑
现在的错误信息 - >"我们很抱歉,但出了点问题."
但是Nginx错误输出是一样的,我检查puma错误消息,但它们只是在启动时和正常停止时记录.

app_directory/log下的Rails日志不会产生任何输出.
puma-manager - >我检查了它是否正常
路径--->我已经检查了三次

Nginx error.log输出消息:

2016/05/18 14:22:21 [crit] 1099#0: *7 connect() to unix:/home/deploy   /hotel-automata/shared/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.2.105, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/deploy/hotel-automata/shared/sockets/puma.sock:/500.html", host: "192.168.2.170"
Run Code Online (Sandbox Code Playgroud)

操作系统 - > Vmware Player,桥接网络Ubuntu Server 14.0.4
Ruby版本:2.3.1
Rails版本:4.2.5.2

这是我的/ etc/nginx/sites-available/default的nginx配置内容

upstream app {
# Path to Puma SOCK file, as defined previously
server unix:/home/deploy/hotel-automata/shared/sockets/puma.sock fail_timeout=0;
}

server …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails nginx puma

9
推荐指数
2
解决办法
8088
查看次数

Puma和Nginx上的Rails ActionCable在通过capistrano部署后无法进行生产

我在Puma和Nginx上使用ActionCable通过Rails创建网站.

但是在部署到Production服务器之后,似乎ActionCable因为这个问题而无法正常工作.WebSocket连接到

WebSocket connection to 
'ws://sub.domain.com/cable' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET
Run Code Online (Sandbox Code Playgroud)

这是我的 production.rb

config.action_cable.url = 'ws://sub.domain.com/cable'
config.web_socket_server_url = "ws://sub.domain.com/cable"
config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/]
config.action_cable.disable_request_forgery_protection = true
Run Code Online (Sandbox Code Playgroud)

这是我的nginx.conf

upstream puma {
  server unix:///home/deploy/apps/app_name/shared/tmp/sockets/app_name-puma.sock;
}

server {
  listen 80 default_server deferred;
  # server_name example.com;

  root /home/deploy/apps/app_name/current/public;
  access_log /home/deploy/apps/app_name/current/log/nginx.access.log;
  error_log /home/deploy/apps/app_name/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;
  } …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nginx puma actioncable

9
推荐指数
1
解决办法
486
查看次数

使用Capistrano 3,Nginx,Puma,GitHub和RVM的Amazon EC2的Rails 4 API部署示例?

我在GitHub上有一个Rails 4 API项目,我正在尝试使用Capistrano 3将我的MacBook Pro部署到使用SSH密钥的两个Amazon AWS EC2 Ubuntu实例 - 一个是app/web服务器,另一个是PostgreSQL数据库服务器 app/web服务器通过RVM拥有最新的Ruby 2,并将使用Nginx/Puma提供API .Nginx将托管多个站点,其中一个是此API.这些是我正在使用的相关宝石:

  • 宝石'capistrano','〜> 3.0.0'
  • 宝石'capistrano-rails'
  • 宝石'capistrano-bundler'
  • 宝石'capistrano-rvm','〜> 0.0.2'
  • 宝石'capistrano-puma',github:"seuros/capistrano-puma"

到目前为止,我没有找到使用Puma的完整Capistrano 3配置示例,但是这两个宝石对于Rails社区同样重要,我确信在GitHub上必须有一个工作的Rails存储库包含这些.

我已经通过官方的Capistrano 3文档.我对Capistrano 2和Capistrano 3之间的差异有困难,并希望看到完整的Capistrano 3示例来理解这些差异.理想情况下,我正在寻找一个包含所有配置文件的开源GitHub存储库(Capistrano 3,Puma,Nginx))以及我可以参考的工作.

谢谢!

capistrano nginx amazon-ec2 puma ruby-on-rails-4

8
推荐指数
1
解决办法
2355
查看次数

RoR 5.0.0 ActionCable wss WebSocket握手:意外的响应代码:301

您好我正在尝试使用ror 5.0.0 beta(使用puma)进行简单聊天,在生产模式下工作(在localhost中没有问题).

这是我的Nginx配置:

upstream websocket {
    server 127.0.0.1:28080;
}


server {

    listen 443;
    server_name mydomain;
    ssl_certificate ***/server.crt;
    ssl_certificate_key ***/server.key;
    ssl on;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 
HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    access_log /var/log/nginx/jenkins.access.log;

    location / {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass http://localhost:3000;
      proxy_read_timeout 90;

      proxy_redirect http://localhost:3000 https://mydomain;


    location /cable/{
        proxy_pass         http://websocket/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $http_host;
        break;
    }

   }
Run Code Online (Sandbox Code Playgroud)

这是config/redis/cable.yml

production:url:redis:// …

wss nginx puma ruby-on-rails-5 actioncable

8
推荐指数
1
解决办法
4693
查看次数

在 Puma 中,如何计算数据库连接数?

我想弄清楚我的应用程序将使用多少个数据库连接。

这是在 Heroku 上托管的 Rails 5。

这是我的 Puma 配置

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  ActiveRecord::Base.establish_connection
end
Run Code Online (Sandbox Code Playgroud)

我的数据库配置的第一部分:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV['RAILS_MAX_THREADS'] || 5 %>
Run Code Online (Sandbox Code Playgroud)

对我来说似乎很奇怪的部分是连接数,而且我的pool设置都在database.yml使用RAILS_MAX_THREADS......但它不应该使用RAILS_MAX_THREADS乘以工人数量(WEB_CONCURRENCY

ruby-on-rails heroku puma ruby-on-rails-5

8
推荐指数
1
解决办法
4192
查看次数

ActiveRecord中的表名损坏错误

偶尔我们PG::UndefinedTable在使用ActiveRecord时会出错.关联表名称是一些损坏的方式,我经常看到 Cancelled附加到表名的末尾.

例如:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "fooCancell" does not exist 
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "Cancelled" does not exist
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "barC" does not exist
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我使用foo和模糊了表名bar.

当rails项目在Puma中运行时,我们会看到这个错误.队列工作人员似乎做得很好.

错误消息中的表与实际表或模型不对应.看起来像是内存损坏的情况.有没有人见过这样的问题?如果是这样,你是如何解决它的?

puma.rb

on_worker_boot do
  ActiveRecord::Base.establish_connection
end
Run Code Online (Sandbox Code Playgroud)

database.yml的

production:
  url:  <%= ENV["DATABASE_URL"] %>
  pool: <%= ENV['DB_CONNECTION_POOL_SIZE'] || 5%>
  reaping_frequency: <%= ENV['DB_CONNECTION_REAPING_FREQUENCY'] || 10 %>
  prepared_statements: false
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails puma

8
推荐指数
1
解决办法
240
查看次数

当我需要一个不同的版本时,如何解决需要最新版本 gem 的 bundler 的问题?

近 2 周以来,我一直在为这个问题挠头。我有一个安装了 rbenv 的 Ubuntu 14.04 服务器,运行许多不同的 Rails 网站,其中一些在旧版本的 Rails 上,其中一些在最新版本上。

我有 2 个网站,它们都需要不同版本的 puma_worker_killer,1 个需要 0.1.0,另一个需要 0.1.1。这两个网站都使用 Ruby 2.5.3。

当我启动服务器时,RAILS_ENV=dev3 bundle exec pumactl -F ./config/puma.rb start我在日志中收到以下错误并且网站挂起:

You have already activated puma_worker_killer 0.1.1, but your Gemfile requires puma_worker_killer 0.1.0. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)
Run Code Online (Sandbox Code Playgroud)

起初我认为这可能是 rbenv 的问题,因为我将 gems 安装在 ~/.gem 而不是 ~/.rbenv 中,所以我在 ~/.gem 中对所有红宝石进行了核处理,并将它们重新安装到正确的位置rbenv 文件夹,bundle install我仍然遇到同样的问题。

现在我想澄清一下,我已经在网上对这个主题进行了广泛的研究,我知道我可以做很多事情来解决这个问题。

我知道我可以更改版本和bundle update puma_worker_killer.

我也知道我可以通过执行gem uninstall puma_worker_killer和选择 0.1.1来删除最新版本,但这意味着不会满足对其他网站的依赖。

我已经深入研究了 …

ruby ubuntu ruby-on-rails bundler puma

8
推荐指数
1
解决办法
512
查看次数

无法将 Puma 作为守护程序运行 OptionParser::AmbiguousOption:模糊选项:-d

我升级到 Puma 5.0.2 并像往常一样启动我的 rails 应用程序:

bundle exec puma -d -e production -b unix:///home/user/app/tmp/puma.sock
Run Code Online (Sandbox Code Playgroud)

现在我得到错误:

OptionParser::AmbiguousOption: ambiguous option: -d
Run Code Online (Sandbox Code Playgroud)

将 puma 作为守护进程运行的正确方法是什么?

ruby ruby-on-rails puma

8
推荐指数
1
解决办法
1747
查看次数

地址已被 puma-dev 使用

问题

每当我尝试跑步时

bundle exec puma -C config/puma.rb --port 5000
Run Code Online (Sandbox Code Playgroud)

我不断得到

bundler: failed to load command: puma (/Users/ogirginc/.asdf/installs/ruby/2.7.2/bin/puma)
Errno::EADDRINUSE: Address already in use - bind(2) for "0.0.0.0" port 5000
Run Code Online (Sandbox Code Playgroud)

尝试过的事情

我已经尝试过任何我能想到或读到的东西。这是列表:

1. 重启 Mac。

  • 没有。

2.找到PID并杀掉。

  • 跑步lsof -wni tcp:5000
COMMAND    PID     USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
ControlCe 6071 ogirginc   20u  IPv4 0x1deaf49fde14659      0t0  TCP *:commplex-main (LISTEN)
ControlCe 6071 ogirginc   21u  IPv6 0x1deaf49ec4c9741      0t0  TCP *:commplex-main (LISTEN)
Run Code Online (Sandbox Code Playgroud)
  • 杀与sudo kill -9 6071.

  • 当我杀死它时,它会使用新的 PID 重新启动。

> lsof -wni …
Run Code Online (Sandbox Code Playgroud)

puma ruby-on-rails-5 puma-dev macos-monterey

8
推荐指数
1
解决办法
2215
查看次数