Question
Je me demande comment on peut utiliser Bundler avec Sinatra. L'idée est d'utiliser les pierres précieuses que les téléchargements Bundler dans le dossier .gems.
La solution 2
Je crois que la meilleure façon est décrite ici sur le 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
Autres conseils
Dans votre application Sinatra, il vous suffit d'exiger la configuration du Bundler:
require "bundler/setup"
require "sinatra"
get "/" do
"Hello world!"
end
Sinon, si vous ne voulez pas ajouter le require "bundler/setup"
supplémentaire en haut de votre application, vous pouvez appeler au lieu via sinatra bundle exec
(par exemple bundle exec ruby myapp.rb
)
Cela suppose que vous avez un Gemfile
à la racine de votre application. Il pourrait ressembler à ceci:
source "http://rubygems.org"
gem "sinatra"
Cela suppose aussi que vous avez Bundler déjà installé (de gem install bundler
) et que vous RAN bundle install
installer toutes les dépendances de pierres précieuses.
Comme ma réponse initiale était assez vieux, mais il semble y avoir encore d'attention à ce sujet est ici la dernière version de configuration Bundler / sinatra qui couvrira la plupart des cas d'utilisation:
Une config.ru
minimale
require './my_sinatra_app'
run MySinatraApp
Un fichier env.rb
de l'environnement qui exige toutes les pierres précieuses (empaquetés prend également en charge le chargement du groupe de l'environnement actuel):
require 'bundler/setup'
APP_ENV = ENV["RACK_ENV"] || "development"
Bundler.require :default, APP_ENV.to_sym
Ensuite, votre fichier app (nécessitant l'environnement) avec votre application sinatra (de Sinatra::Base
):
require_relative 'env'
class MyApp < Sinatra::Base
get "/" do
"hello world"
end
end
Démarrez votre serveur de développement avec rackup et Sinatra sera chargé via Bundler, votre application sera accessible à partir de http: // localhost: 9292 .
$ rackup
ou bundle exec rackup
si nécessaire
Assurez-vous que vous avez un Gemfile comme celui et que vous exécutez la commande suivante bundle
avant de commencer l'application
source "https://rubygems.org"
gem "sinatra"
gem "puma" # a better rack server than the default webrick
+1 pour le sur le site Bundler , mais si vous avez une application simple et utilisez Sinatra dsl au niveau supérieur, vous devez faire ce qui suit:
dans votre Gemfile (dire Bundler pas besoin sinatra):
gem 'sinatra', :require => false
et dans le dossier de l'application (nécessite explicitement sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
Pour utiliser Bundler avec une application Sinatra, il vous suffit de faire deux choses. Tout d'abord, créez un Gemfile.
gem 'sinatra'
Ensuite, configurez votre fichier config.ru pour charger le paquet avant de charger votre application Sinatra.
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
Démarrez votre serveur de développement avec rackup et Sinatra sera chargé via Bundler.
rackup
sources Bundler docs