2016-08-04 3 views
0

Я хочу подделать API с небольшим приложением Sinatra, после this method. Значение У меня есть приложение Rails, и в папке спецификации/поддержки, очень простой Синатра приложение:Приложение Sinatra в Rails 4.1 config

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) 

Похоже Синатра загружается с помощью моей конфигурации Rails. Мне не нужен ActiveRecord и Puma для моего поддельного API.

Я читал this question и this other one, но они в другом контексте, потому что они нуждаются в их приложении Sinatra для совместного использования маршрутов с помощью приложения Rails.

Содержание конфигурации/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 прав, это не коррелируют.

+0

не видим, почему 'config.ru' читается, если вы вызываете рубиновый файл напрямую с помощью' ruby ​​spec/support/fake_programs.rb'. Это действительно то, что происходит? Возможно, покажите свои 'config.ru' и' config/puma.rb'. –

+0

Вы правы, вопрос обновлен. – Ruff9

ответ

2

The Puma README говорит:

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

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

Он продолжает говорить:

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

$ puma -C "-" 

С Puma может обрабатывать Sinatra приложения напрямую, вы могли бы начать свое приложение, как это:

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

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

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