Передача параметров для загрузки через приложение Sinatra
Я новичок в рубине, изучая Синатру. При создании сайта Sinatra, требуя 'sinatra'
, и настройка маршрутов непосредственно в нем довольно проста и достаточно хорошо документирована, создавая приложение, требуя 'sinatra/base'
и записывая класс, который наследует от 'Sinatra::Base
', хотя все еще относительно легко, очень плохо документирован (возможно, потому, что это довольно недавняя особенность Sinatra).
И это именно то, что я делаю. У меня не слишком много проблем с частью Sinatra, однако у меня проблемы с работой на стойке/тонкой/серверной части. По-видимому, есть два способа развертывания приложения: использование самой Sinatra (с использованием метода run!
) и использование файла-стойки (обычно config.ru
).
Использование метода Sinatra run!
чрезвычайно интуитивно понятен и работает как шарм, но, по-видимому, он не работает, если я хочу развернуть свое приложение на heroku. По сути, почти все приложения Sinatra, с которыми я столкнулся в GitHub, используют файл config.ru
.
Использование файла в стойке может быть одинаково интуитивно понятным, но я не могу понять, как передать параметры из приложения Sinatra на сервер (ir: port). Я попытался объединить параметры в массив настроек по умолчанию:
MyApp::App.default_options.merge!(
:run => false,
:env => :production,
:port => 4567
)
run MyApp::App
добавив параметры непосредственно в приложение:
MyApp::App.set :port, 4567
MyApp::App.set :run, false
MyApp::App.set :env, :production
run MyApp::App
установив параметры из класса приложения:
module MyApp
class App < Sinatra::Base
set :port, 4567
set :run, false
set :env, :production
# ...
# config.ru
require 'app'
run MyApp::App
Все вышеприведенные методы не удалось, либо путем отображения сообщений об ошибках, либо просто не принимая во внимание какие-либо варианты. Итак, есть ли способ передать параметры rawn/thin/the sever через приложение Sinatra при использовании файла для проверки? Или параметры в вопросах должны передаваться непосредственно в rackup/thin/the sever через параметры командной строки?
Как ссылка на проблему, вот небольшое приложение Sinatra, которое я создаю: https://github.com/AzizLight/Wiki/
Ответы
Ответ 1
Вы намеренно передаете опции для тонкой работы в командной строке напрямую или через файл конфигурации. Просмотреть все варианты:
$ thin -h
Для производства используйте файл конфигурации:
$ thin -C thin-production.yml -R config.ru start
Вот пример файла thin-production.yml:
---
address: localhost
port: 3020
servers: 4
max_conns: 1024
max_persistent_conns: 512
timeout: 30
environment: production
pid: tmp/pids/thin-production.pid
log: log/thin-production.log
daemonize: true
Ответ 2
Я знаю, что я воскрешаю древний вопрос здесь, но я нашел другое полезное решение, которое еще не было упомянуто. Как указано в этот учебник по вики файлу:
первая строка, начинающаяся с #\
, обрабатывается так, как если бы она была параметрами, позволяя аргументы вставки в файле конфигурации.
Итак, если вы хотите установить свой хост на 0.0.0.0
и порт на 5656
, вы должны добавить следующую строку в начало вашего файла config.ru
:
#\ -o 0.0.0.0 -p 5656