Pregunta
Me pregunto cómo se puede utilizar Bündler con Sinatra. La idea es utilizar las gemas que Bundler descargas dentro de la carpeta .gems.
Solución 2
Creo que la mejor forma en que se describe aquí en el blog EngineYard:
# 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
Otros consejos
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 require "bundler/setup"
adicional en la parte superior de su aplicación, en su lugar puede invocar a través de Sinatra 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.
A medida que 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 que cubrirá la mayor parte de los casos de uso:
A config.ru
mínimo
require './my_sinatra_app'
run MySinatraApp
Un archivo env.rb
entorno que requiere que todos los paquetes de gemas (también soporta 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
Iniciar el servidor de desarrollo con rackup, y Sinatra se carga a través de Bündler, su aplicación será accesible desde http: // localhost: 9292 .
$ rackup
o bundle exec rackup
si es necesario
Asegúrese de que tiene un Gemfile como el siguiente y ejecutar el comando antes de iniciar bundle
la aplicación
source "https://rubygems.org"
gem "sinatra"
gem "puma" # a better rack server than the default webrick
1 para la guía rel="noreferrer"> , pero si usted tiene una aplicación sencilla y utiliza Sinatra DSL en el nivel superior, entonces usted tiene que hacer lo siguiente:
en su Gemfile (bundler decir 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
Para usar bundler con una aplicación Sinatra, sólo tiene que hacer dos cosas. En primer lugar, crear un Gemfile.
gem 'sinatra'
A continuación, configurar el archivo config.ru para cargar el paquete antes de cargar su aplicación Sinatra.
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
Iniciar el servidor de desarrollo con rackup, y Sinatra se carga a través de Bündler.
rackup