Rails 4.1配置中的Sinatra应用程序

时间:2016-08-04 10:41:49

标签: ruby-on-rails ruby sinatra puma

我想跟随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是正确的,它没有相关性。

1 个答案:

答案 0 :(得分:2)

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 => "-"}