¿Sinatra + Bundler ?
Me pregunto cómo se puede usar Bundler con Sinatra. La idea es utilizar las gemas que Bundler descarga dentro de la .carpeta de gemas.
5 answers
Dentro de su aplicación Sinatra, solo tiene que requerir la configuración del bundler:
require "bundler/setup"
require "sinatra"
get "/" do
"Hello world!"
end
Alternativamente, si no desea agregar el require "bundler/setup"
adicional en la parte superior de su aplicación, puede invocar sinatra a través de bundle exec
(por ejemplo, bundle exec ruby myapp.rb
)
Esto asume que usted tiene un Gemfile
en la raíz de su aplicación. Podría verse así:
source "http://rubygems.org"
gem "sinatra"
Esto también asume que ya ha instalado bundler (gem install bundler
) y que ejecutó bundle install
para instalar todas las dependencias de la gema.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-27 04:18:58
Creo que la mejor manera se describe aquí {[3] } 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-26 18:30:30
Como mi respuesta original era bastante antigua, pero parece que todavía hay atención a este tema, aquí está la última versión de la configuración de bundler / sinatra que cubrirá la mayor parte del caso de uso:
Un mínimo config.ru
require './my_sinatra_app'
run MySinatraApp
Un archivo de entorno env.rb
que requiere todas las gemas incluidas (también admite la carga del 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 la aplicación (que requiere el entorno) con su aplicación sinatra (Sinatra::Base
):
require_relative 'env'
class MyApp < Sinatra::Base
get "/" do
"hello world"
end
end
Comience su desarrollo servidor 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úrese de tener un Gemfile como el siguiente y ejecute 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-06 13:23:09
+ 1 para la guía en el sitio web de bundler, pero si tiene una aplicación simple y usa el dsl de Sinatra en el nivel superior, entonces debe hacer lo siguiente:
En tu Gemfile (dile a bundler que no requiere sinatra):
gem 'sinatra', :require => false
Y en el archivo de la aplicación (requiere explícitamente sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-21 09:20:58
Para usar bundler con una aplicación Sinatra, solo necesita hacer dos cosas. Primero, crea un Gemfile.
gem 'sinatra'
Luego, configure su config.ru archivo para cargar el paquete antes de que cargue su aplicación Sinatra.
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
Inicie su servidor de desarrollo con rackup, y Sinatra se cargará a través de Bundler.
rackup
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-21 13:00:12