Domanda
Mi chiedo come si possa usare Bundler con Sinatra. L'idea è quella di utilizzare le gemme che scarica Bundler all'interno della cartella .gems.
Soluzione 2
credo che il modo migliore è descritto qui su 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
Altri suggerimenti
All'interno della vostra Sinatra app, è sufficiente richiedere la configurazione Bundler:
require "bundler/setup"
require "sinatra"
get "/" do
"Hello world!"
end
In alternativa, se non si desidera aggiungere il require "bundler/setup"
aggiuntivo in cima alla vostra applicazione, si può invece richiamare Sinatra via bundle exec
(ad esempio bundle exec ruby myapp.rb
)
Questo presuppone che si dispone di un Gemfile
nella root della vostra applicazione. Potrebbe assomigliare a questo:
source "http://rubygems.org"
gem "sinatra"
Questo presuppone anche che è già stato installato Bundler (gem install bundler
) e che è stato eseguito bundle install
per installare tutte le dipendenze gemma.
Come la mia risposta originale era piuttosto vecchio, ma sembra che ci sia ancora l'attenzione su questo tema qui è l'ultima versione di fardellatrice / setup Sinatra che coprirà la maggior parte del caso d'uso:
Un config.ru
minima
require './my_sinatra_app'
run MySinatraApp
Un file env.rb
ambiente che richiede tutte le gemme in bundle (supporta anche il caricamento del gruppo del contesto attuale):
require 'bundler/setup'
APP_ENV = ENV["RACK_ENV"] || "development"
Bundler.require :default, APP_ENV.to_sym
Allora il vostro file app (che richiede l'ambiente) con la tua applicazione Sinatra (Sinatra::Base
):
require_relative 'env'
class MyApp < Sinatra::Base
get "/" do
"hello world"
end
end
Avviare il server di sviluppo con rackup, e Sinatra verrà caricato tramite Bundler, la vostra applicazione sarà accessibile da http: // localhost: 9292 .
$ rackup
o bundle exec rackup
se necessario
Assicurarsi di avere un Gemfile come la seguente e si esegue il comando bundle
prima di avviare l'applicazione
source "https://rubygems.org"
gem "sinatra"
gem "puma" # a better rack server than the default webrick
1 per la guida rel="noreferrer"> , ma se si dispone di una semplice applicazione e utilizzare Sinatra dsl al livello più alto, quindi è necessario effettuare le seguenti operazioni:
nel Gemfile (dire bundler non richiede Sinatra):
gem 'sinatra', :require => false
e nel file dell'applicazione (richiede esplicitamente Sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
Per usare bundler con un'applicazione Sinatra, avete solo bisogno di fare due cose. In primo luogo, creare un Gemfile.
gem 'sinatra'
Quindi, impostare il file di config.ru per caricare il pacco prima di caricare il vostro Sinatra app.
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
Avviare il server di sviluppo con rackup, e Sinatra verrà caricato tramite Bundler.
rackup