防止Puma在本地运行(Ruby on Rails)

4

我最近开始在nginx上使用Puma作为我的生产服务器,但是当我尝试在本地运行我的应用程序时,它会尝试使用所有生产设置来运行Puma并失败。我该如何防止Puma在本地运行?

据我所知,我所做的一切就是将puma gem添加到我的gemfile中,因此我不知道它如何访问我的服务器配置(我在这个领域不太熟悉)。我将其放在我的生产组中:

group :production do
  gem 'pg'
  gem 'rails_12factor'
  gem 'puma'
end

错误:

→ rails s
=> Booting Puma
=> Rails 4.2.6 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[8917] Puma starting in cluster mode...
[8917] * Version 3.4.0 (ruby 2.0.0-p645), codename: Owl Bowl Brawl
[8917] * Min threads: 1, max threads: 6
[8917] * Environment: development
[8917] * Process workers: 1
[8917] * Phased restart available
[8917] * Listening on tcp://localhost:3000
[8917] Use Ctrl-C to stop
/rbenv/versions/2.0.0-p645/lib/ruby/gems/2.0.0/gems/puma-3.4.0/lib/puma/runner.rb:103:in `reopen': No such file or directory - /Users/me/mll/shared/log/puma.stdout.log (Errno::ENOENT)

此外,虽然目前对我来说不是很重要,但在本地运行 Puma 对我有什么好处吗?如果有的话,您有任何关于如何做到这一点的技巧/资源吗?


你是如何运行它的? - j-dexx
只需运行 rails s - Ben
很奇怪,我以为在使用“rails s”时,Puma不接受配置。 - j-dexx
@Ben 你找到解决问题的方法了吗? - Răzvan Ciocănel
3个回答

3
您需要将puma放入您的生产组中。就像这样:
group :production do
   gem 'puma'
end

那么puma只会在生产环境中被使用,而不是开发环境。
更新
确保你的 `bin/rails` 文件看起来像这样:
#!/usr/bin/env ruby
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'

感谢您的回复 - 很抱歉我在问题中说错了话 - 我将其放入我的生产组中,但仍然存在相同的问题(已更新问题)。 - Ben
你把它放在“production”组后进行了打包吗? - Kyle Decot
是的。我甚至完全删除了仓库,重新克隆(已经在生产组中),并重新打包,但仍然出现相同的错误。 - Ben
或者确保你没有将gem放在该组之外的gemfile中。另外,你有没有修改过application.rb文件中的这一行代码?Bundler.require(*Rails.groups) - Răzvan Ciocănel

2

我和Ben遇到了完全相同的问题。在开发和测试时,我尝试在本地使用web brick,在生产环境中使用puma。

Gem文件已完美定义,因为puma只在production组中。像@Răzvan Ciocănel建议的那样,已经检查了'bin/rails'和'config/application'。但本地仍然使用'puma'启动。

最后,查看'bundle install' gem列表,'puma'已安装,同时还安装了其他'production' gem。运行'bundle install --without production',现在本地将使用Web Brick作为ROR默认值。

我想只要puma被bundle安装,它就会在本地加载,除非您配置了某些内容来强制关闭它。因此,解决方案可能是在开发和测试中从bundle列表中删除该gem。


1

Rails 3项目(它比预期的要持续更长时间...)我将生产环境组中的unicorn更改为puma。

group :production do
  gem 'puma'
end

当我尝试运行测试或开发服务器(应该是thin)时,出现了以下错误:
C:\Rails Projects\Rep>rails s
Could not find gem 'puma x86-mingw32' in any of the gem sources listed in your Gemfile or available on this machine.
Run `bundle install` to install missing gems.

在研究了一会儿后(包括找到这个问题),我放弃了并决定在开发中使用puma。我运行了bundle install并尝试运行server,然后,thin又能正常工作了。

然后我意识到我仍然只有它在生产组中-我回顾了bundle install,没有安装任何东西,puma仍未安装。但是现在,自从编辑了gemfile并运行了bundle install之后,一切都正常了。

C:\Rails Projects\Rep>rails s
=> Booting Thin
=> Rails 3.2.22.2 application starting in development on http://0.0.0.0:3000

所以我猜测“缺失的宝石”错误并不是因为它试图实际运行puma,而是由于未尝试gemfile而生成的某种bundler错误?只是为了让任何在类似情况下到达此处的人加快速度而发布此信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接