Передача параметров в стойку через приложение Sinatra - PullRequest
12 голосов
/ 08 декабря 2010

Я новичок в рубине, изучаю Синатру.Хотя создание сайта Sinatra с использованием 'sinatra' и настройка маршрутов непосредственно под ним довольно легко и довольно хорошо документировано, создание приложения с использованием 'sinatra/base' и написание класса, который наследуется от 'Sinatra::Base ', хотя все еще относительно прост,очень плохо документирован (возможно, потому что это довольно недавняя особенность Синатры).

И это именно то, что я делаю.У меня не слишком много проблем со стороны Sinatra, однако у меня есть проблемы со стойкой / thin / server.По-видимому, существует два способа развертывания приложения: использование самого Sinatra (с использованием метода run!) и использование файла рэпа (обычно config.ru).

Использование метода Sinatra run! чрезвычайно интуитивно понятно и работаеткак очарование, но, видимо, это не сработает, если я захочу развернуть свое приложение на heroku.На самом деле, почти все приложения Sinatra, с которыми я столкнулся на GitHub, используют файл config.ru.

Использование файла рейка может быть одинаково интуитивно понятным, но я не могу понять, как передатьопции из приложения Sinatra на сервер (ir: порт).Я попытался объединить параметры в массив параметров по умолчанию для стойки:

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

Не удалось выполнить все вышеперечисленные методы: либо показывать сообщения об ошибках, либо просто не принимать во внимание ни один из параметров.Так есть ли способ передать параметры в rackup / thin / theverver через приложение Sinatra при использовании файла rackup?Или параметры в вопросах должны быть переданы напрямую в rackup / thin / theverver через параметры командной строки?

В качестве ссылки на проблему, вот небольшое приложение Sinatra, которое я создаю: https://github.com/AzizLight/Wiki/

Ответы [ 2 ]

11 голосов
/ 14 декабря 2010

Вы на самом деле собираетесь передать параметры thin в командной строке напрямую или через файл конфигурации. Посмотреть все варианты:

$ 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 
3 голосов
/ 01 мая 2016

Я знаю, что я воскрешаю древний вопрос здесь, но я наткнулся на другое полезное решение, которое еще не упоминалось.Как указано в этом вики-руководстве по стойке :

, первая строка, начинающаяся с #\, обрабатывается так, как если бы это были параметры, позволяя указывать аргументы стойки в файле конфигурации.

Поэтому, если вы хотите установить хост на 0.0.0.0 и порт на 5656, вы добавите следующую строку в начало вашего config.ru файла:

#\ -o 0.0.0.0 -p 5656
...