Приложение Sinatra в конфигурации Rails 4.1

Я хочу подделать API с помощью небольшого приложения Sinatra, следуя этому методу< /а>. Это означает, что у меня есть приложение Rails, а в папке spec/support очень простое приложение Sinatra:

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

Частично цель состоит в том, чтобы запустить это приложение локально, чтобы я мог работать над своим приложением Rails с поддельным API. Проблема: когда я делаю 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. Мне не нужны ни ActiveRecord, ни Puma для моего поддельного API.

Я прочитал этот вопрос и другой, но они находятся в разных контексте, потому что им нужно их приложение 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 прав, это не коррелировано.


person Ruff9    schedule 04.08.2016    source источник
comment
не видя, почему config.ru читается, если вы вызываете файл ruby ​​напрямую с ruby spec/support/fake_programs.rb. Это действительно то, что происходит? Может быть, покажите также свои config.ru и config/puma.rb.   -  person max pleaner    schedule 04.08.2016
comment
Вы правы, вопрос обновлен.   -  person Ruff9    schedule 04.08.2016


Ответы (1)


Puma README говорит:

По умолчанию, если файл конфигурации не указан, Puma будет искать файл конфигурации в config/puma.rb.

Вот почему ваше приложение использует этот файл конфигурации.

Далее говорится:

Если вы хотите запретить Puma искать файл конфигурации в этих местах, укажите тире в качестве аргумента флага -C (или --config):

$ puma -C "-"

Поскольку Puma может напрямую обрабатывать приложения Sinatra, вы можете запустить свое приложение следующим образом:

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

Если вы хотите запустить свое приложение, используя ruby с Puma в качестве встроенного сервера (как вы делаете сейчас), я думаю, добавление этого в ваше приложение Sinatra должно сработать (ни :server_settings Sinatra, ни :config_files Puma очень хорошо документированы):

set :server, 'puma'
set :server_settings, {:config_files => "-"}
person matt    schedule 04.08.2016