2009-11-10 33 views
35

Me pregunto cómo se puede usar Bundler con Sinatra. La idea es usar las gemas que Bundler descarga dentro de la carpeta .gems.Sinatra + Bundler?

+3

Yehuda Katz tiene un gran artículo sobre el uso de bundler hoy: http: // yehudakatz .com/2009/11/03/using-the-new-gem-bundler-today/ –

+1

Además, la documentación del bundler en sí tiene un buen ejemplo de cómo configurar una aplicación de sinatra http://gembundler.com/sinatra.html y es actual – christophercotton

Respuesta

10

Creo que la mejor forma en que se describe here en EngineYard blog:

# This makes sure the bundled gems are in our $LOAD_PATH 
require File.expand_path(File.join(File.dirname(__FILE__), 'vendor', 'gems', 'environment')) 

# This actually requires the bundled gems 
Bundler.require_env 

class MyApp < Sinatra::Base 
    # stuff 
end 
47

dentro de su aplicación Sinatra, sólo hay que exigir la instalación bundler:

require "bundler/setup" 
require "sinatra" 

get "/" do 
    "Hello world!" 
end 

Como alternativa, si no desea agregar el adicional require "bundler/setup" en la parte superior de su aplicación, en su lugar puede invocar Sinatra a través de bundle exec (por ejemplo bundle exec ruby myapp.rb)

Esto supone que tiene un Gemfile en la raíz de su aplicación. Se podría tener este aspecto:

source "http://rubygems.org" 

gem "sinatra" 

Esto también supone que ya ha instalado bundler (gem install bundler) y que se ejecutó bundle install para instalar todas las dependencias de la gema.

+2

si usa Bundler.require: valores predeterminados, no es necesario solicitar manualmente 'sinatra' u otras gemas – makevoid

+0

http://bundler.io/v1.3/sinatra.html – khelll

9

Como mi respuesta original era bastante viejo, pero parece que hay todavía la atención sobre este tema aquí es la versión más reciente de bundler/configuración Sinatra cuales cubrirá la mayor parte del caso de uso:

Un mínimo config.ru

require './my_sinatra_app' 
run MySinatraApp 

Un entorno env.rb archivo que requiere que todas las gemas en paquete (también es compatible con la carga de grupo del entorno actual):

require 'bundler/setup' 

APP_ENV = ENV["RACK_ENV"] || "development" 

Bundler.require :default, APP_ENV.to_sym 

A continuación, el archivo de aplicación (que requiere el medio ambiente) con su aplicación Sinatra (Sinatra::Base):

require_relative 'env' 

class MyApp < Sinatra::Base 
    get "/" do 
    "hello world" 
    end 
end 

de inicio su servidor de desarrollo con rackup, y Sinatra se cargará a través de Bundler, su aplicación será accesible desde http://localhost:9292.

$ rackup 

o bundle exec rackup si es necesario

Asegúrate de que tienes un Gemfile como la siguiente y ejecutar el comando bundle antes de iniciar la aplicación

source "https://rubygems.org" 

gem "sinatra" 

gem "puma" # a better rack server than the default webrick 
7

+1 para el guide on the bundler website, pero si usted tiene una aplicación simple y usa la dsl de Sinatra en el nivel superior, entonces necesita hacer lo siguiente:

en y nuestra Gemfile (decirle bundler no requiere Sinatra):

gem 'sinatra', :require => false 

y en el archivo de la aplicación (exigir explícitamente Sinatra):

require 'rubygems' 
require 'bundler' 
Bundler.require 
require 'sinatra' 

get '/' do 
    'hello world' 
end