2010-12-08 56 views
12

Je suis nouveau à ruby, l'apprentissage de Sinatra. Bien que créer un site Sinatra en demandant 'sinatra' et configurer les routes directement sous soit assez facile et assez bien documenté, créer une application en demandant 'sinatra/base' et écrire une classe qui hérite de 'Sinatra::Base ', tout en étant relativement facile, est très mal documenté (peut-être parce que c'est une caractéristique assez récente de Sinatra).Passer des options à rackup via une application Sinatra

Et c'est exactement ce que je fais. Je n'ai pas trop de problèmes sur la partie Sinatra, mais j'ai un peu de mal sur la partie rackup/thin/server. Apparemment, il existe deux façons de déployer l'application: en utilisant Sinatra elle-même (en utilisant la méthode run!) et en utilisant un fichier rackup (typiquement config.ru). Utiliser la méthode run! de Sinatra est extrêmement intuitive et fonctionne comme un charme, mais apparemment, cela ne fonctionne pas si je veux déployer mon application sur heroku. En fait, presque toutes les applications Sinatra que j'ai rencontrées sur GitHub utilisent un fichier config.ru. L'utilisation d'un fichier rackup peut être tout aussi intuitive, mais je n'arrive pas à comprendre comment passer des options de l'application Sinatra au serveur (ir: le port). J'ai essayé de fusionner les options pour les options par défaut de rackup de tableau:

MyApp::App.default_options.merge!(
    :run => false, 
    :env => :production, 
    :port => 4567 
) 

run MyApp::App 

en ajoutant des options directement à l'application:

MyApp::App.set :port, 4567 
MyApp::App.set :run, false 
MyApp::App.set :env, :production 

run MyApp::App 

en définissant des options à partir de la classe d'application:

module MyApp 
    class App < Sinatra::Base 
    set :port, 4567 
    set :run, false 
    set :env, :production 

    # ... 

    # config.ru 
    require 'app' 

    run MyApp::App 

Tous les méthodes ci-dessus ont échoué, soit en affichant des messages d'erreur, soit en ne prenant aucune des options en considération. Donc, y a-t-il un moyen de passer des options à rackup/thin/the sever via une application Sinatra lors de l'utilisation d'un fichier rackup? Ou les options dans les questions doivent être passées directement à rackup/thin/le serveur via les options de la ligne de commande?

En référence au problème, voici la petite application Sinatra Je construis: https://github.com/AzizLight/Wiki/

Répondre

11

Vous allez actully passer des options mince sur la ligne de commande directement ou via un fichier de configuration. Voir toutes les options:

$ thin -h 

Pour la production, utilisez un fichier de configuration:

$ thin -C thin-production.yml -R config.ru start 

Voici un exemple de fichier mince 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 
+0

Merci beaucoup :) –

3

Je sais que je ressuscite une question ancienne ici, mais je suis tombé sur une autre solution utile non encore mentionnée. Comme indiqué dans this rack wiki tutorial:

la première ligne commençant par #\ est traitée comme si elle était d'options, ce qui permet des arguments rackup à spécifier dans le fichier de configuration.

Donc, si vous voulez configurer votre hôte 0.0.0.0 et port à 5656, vous ajoutez la ligne suivante au début de votre fichier config.ru:

#\ -o 0.0.0.0 -p 5656 
+0

fonctionne parfaitement. Mais existe-t-il un moyen de définir des valeurs à partir du code? par exemple: port => RACK_ENV == "production"? 8080: 3000 – 18augst

+0

Peut-être entourer '# \' les lignes de paramétrage des commentaires dans 'if else'? Pas sûr cependant –