【问题标题】:Sinatra app in Rails 4.1 configRails 4.1 配置中的 Sinatra 应用程序
【发布时间】:2016-12-10 10:40:59
【问题描述】:

我想在this method 之后用一个小的 Sinatra 应用伪造一个 API。这意味着我有一个 Rails 应用程序,并且在 spec/support 文件夹中,有一个非常简单的 Sinatra 应用程序:

module FakePrograms
  class Application < Sinatra::Base
    get "/API/V1/programs" do
      {
        programs: [
          ...
        ]
      }.to_json
    end
  end
end

部分目标是在本地启动这个应用程序,这样我就可以使用假 API 处理我的 Rails 应用程序。问题:当我做ruby spec/support/fake_programs.rb时,应用程序无法启动,我得到一个

config/puma.rb:14:in `block in _load_from':
uninitialized constant
#<Class:#<Puma::DSL:0x007fac0b0e0380>>::ActiveRecord (NameError)

看起来 Sinatra 正在使用我的 Rails 配置启动。我的虚假 API 不需要 ActiveRecord 或 Puma。

我读过this questionthis other one,但他们的语境不同,因为他们需要 Sinatra 应用与 Rails 应用共享路线。

config/puma.rb 的内容:

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['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
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end

我正在查看 config.ru 文件,但 @max 是正确的,它不相关。

【问题讨论】:

  • 如果您直接使用 ruby spec/support/fake_programs.rb 调用 ruby​​ 文件,则不明白为什么会读取 config.ru。真的是这样吗?也许也可以显示您的config.ruconfig/puma.rb
  • 你是对的,问题已更新。

标签: ruby-on-rails ruby sinatra puma


【解决方案1】:

Puma README 说:

默认情况下,如果没有指定配置文件,Puma 会在 config/puma.rb 中查找配置文件。

这就是您的应用使用此配置文件的原因。

接着说:

如果您想阻止 Puma 在这些位置查找配置文件,请提供破折号作为 -C(或 --config)标志的参数:

$ puma -C "-"

由于 Puma 可以直接处理 Sinatra 应用程序,您可以这样启动您的应用程序:

$ puma -c "-" spec/support/fake_programs.rb

如果您想使用 ruby 和 Puma 作为内置服务器来启动您的应用程序(就像您现在正在做的那样),我认为将它添加到您的 Sinatra 应用程序应该可以工作(无论是 Sinatra 的 :server_settings 还是 Puma 的 :config_files有很好的记录):

set :server, 'puma'
set :server_settings, {:config_files => "-"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多