美洲狮 config.rb 需要

Puma config.rb require

我的目录结构如下:

|-app
|-config
|---puma
|-----base.rb
|-----development.rb
|-----production.rb

为了保持 development.rb & production.rb 干燥,我在每个文件的顶部添加了 require_relative 'base'base.rb 包含两种环境通用的配置。

但是,foreman start 退出并出现此错误:

base.rb:1:in `<top (required)>': undefined method `workers' for main:Object (NoMethodError)
development.rb:1:in `require_relative'

更新

import directive was added to the config file for Puma3.1.0.


解决方法

require_relative 'base'替换为eval(File.read(File.join(File.dirname(__FILE__), 'base.rb')))

说明

关于其内容load your config file, Puma does an instance_eval。因此,配置文件中的配置方法在 Puma::DSL 对象上被调用。

但是,“需要将文件加载到全局命名空间而不是 进入调用代码的范围”(require in instance_eval)。因此,使用 require_relative 会导致 base.rb 中的配置方法在 main:Object 而不是 Puma::DSL 对象,因此出现错误。

增强

也许 Puma 可以在他们的 DSL 中添加方法(可能称为 importimport_relative),使这更容易和更清晰。