Tag: puma

在Middleware中运行的线程正在使用旧版本的父实例变量

我使用Heroku教程来实现websockets。 它适用于Thin,但不适用于Unicorn和Puma。 还有一个回应消息实现,它响应客户端的消息。 它在每个服务器上都能正常工作,因此websockets实现没有问题。 Redis设置也是正确的(它捕获所有消息,并执行subscribe块内的代码)。 它现在如何工作: 在服务器启动时,初始化一个空的@clients数组。 然后启动新的Thread,它正在侦听Redis,它旨在从@clients数组向相应的用户发送该消息。 在页面加载时,会创建新的websocket连接,它存储在@clients数组中。 如果我们从浏览器收到消息,我们会将其发送回与同一用户连接的所有客户端(该部分在Thin和Puma上都正常工作)。 如果我们收到Redis的消息,我们也会查找存储在@clients数组中的所有用户连接。 这是奇怪的事情发生的地方: 如果使用Thin运行,它会在@clients数组中找到连接并将消息发送给它们。 如果使用Puma / Unicorn运行,@ client数组总是为空,即使我们按该顺序尝试它(没有页面重新加载或任何东西): 从浏览器发送消息 – > @clients.length为1,传递消息 通过Redis发送消息 – > @clients.length为0,消息丢失 从浏览器发送消息 – > @clients.length仍为1,消息已发送 请问有人请告诉我我错过了什么? Puma服务器的相关配置: workers 1 threads_count = 1 threads threads_count, threads_count 相关中间件代码: require ‘faye/websocket’ class NotificationsBackend def initialize(app) @app = app @clients = [] Thread.new do redis_sub […]

如何确定在Heroku Performance dyno上运行的Puma工作者和线程的正确数量?

我已经阅读了Heroku关于Puma和dyno类型的所有文章,我无法得到直接答案。 我看到一些人提到Puma工人的数量应该由核心数决定。 我找不到Heroku揭示出性能-M或性能-L dyno有多少核心的地方。 在本文中,Heroku暗示了一种方法: https : //devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server 我认为他们建议将线程设置为1并增加Puma工作者的数量,直到你开始看到R14(内存)错误,然后退出。 然后增加线程数,直到CPU最大化,虽然我不认为Heroku报告CPU利用率。 有人可以提供指导吗? (我还想决定是否应该使用一个性能-L或多个性能-M dynos,但我认为一旦我弄清楚如何设置工作者和线程就会很清楚)

HTTP解析错误,格式错误的请求 – Ruby on Rails

尝试运行Ruby on Rails应用程序时,我在终端中看到以下错误。 HTTP parse error, malformed request (): # 2017-03-12 13:10:02 -0400: ENV: {“rack.version”=>[1, 3], “rack.errors”=>#<IO:>, “rack.multithread”=>true, “rack.multiprocess”=>false, “rack.run_once”=>false, “SCRIPT_NAME”=>””, “QUERY_STRING”=>””, “SERVER_PROTOCOL”=>”HTTP/1.1”, “SERVER_SOFTWARE”=>”puma 3.4.0 Owl Bowl Brawl”, “GATEWAY_INTERFACE”=>”CGI/1.2”} 浏览器错误: This site can’t provide a secure connection. localhost sent an invalid response. ERR_SSL_PROTOCOL_ERROR* 我尝试了以下内容 清除浏览器缓存并重新启动 恢复到当时正在运行的GIT中的旧提交 重启终端 运行function不同的rails应用程序

在使用Action Cable(Puma端口侦听)的同时将Ruby on Rails应用程序部署到Heroku

我已经在本地主机环境中使用Action Cable,在这种情况下,我使用包含的简单文件启动Puma服务器 # /bin/bash bundle exec puma -p 28080 cable/config.ru 一旦发生这种情况,puma服务器就会启动并正在侦听此28080端口以及运行本地服务器的端口。 通过在线搜索,我找不到一个可以告诉我在heroku上模拟这个方法的地方,或者让我的服务器始终在同一个端口上开始的方式(虽然我不知道这是否会给我所需的结果) 我有一个javascript文件设置来创建与该端口相关的消费者。 //= require cable //= require_self //= require_tree . this.App = {}; App.cable = Cable.createConsumer(‘ws://127.0.0.1:28080′); 我想我需要更改127.0.0.1部分以及部署到heroku也可以工作,但我不确定。 我试图切断28080部分并用ENV [‘PORT’]替换它,但它说它是一个未知的变量,即使我有一个puma.rb文件设置,其端口设置为 … (only part of the file) rackup DefaultRackup port ENV[‘PORT’] || 3000 environment ENV[‘RACK_ENV’] || ‘development’ … 所以在我看来ENV [‘PORT’]被定义为当我检查heroku日志时puma服务器将是 2015-07-26T06:50:25.278030+00:00 heroku[web.1]: Starting process with command […]

如何使用’rails s puma’运行配置文件的rails puma服务器

我可以使用rails s puma或只是puma在rails中运行puma服务器。 根据这个答案 ,运行rails s puma使服务器知道rails环境。 它显示了单独运行puma服务器错误等。 我想像这样设置一个配置文件: 配置/ puma.rb workers Integer(ENV[‘PUMA_WORKERS’] || 3) threads Integer(ENV[‘MIN_THREADS’] || 1), Integer(ENV[‘MAX_THREADS’] || 16) rackup DefaultRackup port ENV[‘PORT’] || 3000 environment ENV[‘RACK_ENV’] || ‘development’ … 如果我运行puma -C config/puma.rb一切正常。 但是,如果我运行rails s puma我rails s puma如何给puma选项。 我尝试过以下方法: rails s puma # Puma server works but no config file is passed […]

如何将Rails开发服务器设置为webbrick而不是Puma

我在Heroku上使用Puma作为我的服务器。 当我安装了Puma gem时,我的开发环境会以Puma作为服务器启动。 如果不从我的gemfile中拉出pum gem,我似乎无法关闭它。 我喜欢在开发中使用保存服务器作为生产的想法,但美洲狮服务器使我很难跟踪我的调试语句。 此外,我似乎没有办法改变最大线程,即使我的puma.rb文件设置为1,在开发中出现16。

Rails 4,Live Streaming,保持打开状态,阻止请求

我正在尝试使用Rails 4 Live Streaming组件。 这一切都有效,除了看起来流保持打开并阻止新的请求。 关闭或单击应用程序中的新链接时,如何确保连接正常关闭? 这是我的直播活动控制器。 def events response.headers[“Content-Type”] = “text/event-stream” redis = Redis.new redis.psubscribe(“participants.*”) do |on| on.pmessage do |pattern, event, data| response.stream.write(“event: #{event}\n”) response.stream.write(“data: #{data}\n\n”) end end rescue IOError ensure redis.quit response.stream.close end 数据库conf production: adapter: postgresql encoding: unicode database: ************ pool: 1000 username: ************ password: ************ timeout: 5000 我在使用postgresql 9.2.x的Ubuntu 10.04上使用puma作为独立的webserver(我没有需要由nginx提供的大量静态文件)。

Rails服务器看不到代码更改和重新加载文件

我注意到我的rails服务器在更改后没有重新加载控制器,模型和可能的任何其他文件。 我使用Vagrant和Rails API,我发现有些人通过在Vagrantfile添加以下行来解决这个问题。 config.vm.provider “virtualbox” do |vb| vb.customize [ “guestproperty”, “set”, :id, “/VirtualBox/GuestAdd/VBoxService/–timesync-set-threshold”, 5000 ] end 它不能解决我的问题。 我没想到我还能做些什么来解决这个问题。 我附上可能对您有用的文件。 我的Gemfile看起来像这样: source ‘https://rubygems.org’ gem ‘rake’, ‘= 5.0.0.beta3’, ‘= 0.3.18’, ‘ 0.18’ gem ‘active_model_serializers’ gem ‘rspec-its’ gem ‘database_cleaner’ # Use Puma as the app server gem ‘puma’ # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder # […]

为什么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 添加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 :::* […]

Sidekiq错误:无法连接到服务器:没有这样的文件或目录

我遇到了我的sidekiq,heroku,redistogo,rails 4配置问题。 我在heroku上有1个dyno和1个worker。 我只是使用worker来获取外部api的请求。 这是我在Heroku日志中得到的错误: app[worker.1]: could not connect to server: No such file or directory app[worker.1]: connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”? app[worker.1]: Is the server running locally and accepting 这是我的config/initializers/sidekiq.rb if Rails.env.production? Sidekiq.configure_client do |config| config.redis = { url: ENV[‘REDISTOGO_URL’] } end Sidekiq.configure_server do |config| config.redis = { url: ENV[‘REDISTOGO_URL’] } Rails.application.config.after_initialize do […]