全新生成的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:
我误解了.运行 …
我需要部署我的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) 我在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) 我在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.这些是我正在使用的相关宝石:
到目前为止,我没有找到使用Puma的完整Capistrano 3配置示例,但是这两个宝石对于Rails社区同样重要,我确信在GitHub上必须有一个工作的Rails存储库包含这些.
我已经通过官方的Capistrano 3文档.我对Capistrano 2和Capistrano 3之间的差异有困难,并希望看到完整的Capistrano 3示例来理解这些差异.理想情况下,我正在寻找一个包含所有配置文件的开源GitHub存储库(Capistrano 3,Puma,Nginx))以及我可以参考的工作.
谢谢!
您好我正在尝试使用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:// …
我想弄清楚我的应用程序将使用多少个数据库连接。
这是在 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
?
偶尔我们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中运行时,我们会看到这个错误.队列工作人员似乎做得很好.
错误消息中的表与实际表或模型不对应.看起来像是内存损坏的情况.有没有人见过这样的问题?如果是这样,你是如何解决它的?
on_worker_boot do
ActiveRecord::Base.establish_connection
end
Run Code Online (Sandbox Code Playgroud)
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) 近 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来删除最新版本,但这意味着不会满足对其他网站的依赖。
我已经深入研究了 …
我升级到 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 作为守护进程运行的正确方法是什么?
每当我尝试跑步时
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 ×10
nginx ×4
ruby ×4
actioncable ×2
activerecord ×1
amazon-ec2 ×1
bundler ×1
capistrano ×1
heroku ×1
ipv6 ×1
puma-dev ×1
ubuntu ×1
wss ×1