Pergunta
Eu estou querendo saber como se pode usar Bundler com Sinatra. A ideia é usar as jóias que Empacotador de downloads dentro das .gems pasta.
Solução 2
Eu acredito que a melhor maneira é descrito aqui em 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
Outras dicas
Dentro de sua aplicação Sinatra, você só tem que exigem a configuração bundler:
require "bundler/setup"
require "sinatra"
get "/" do
"Hello world!"
end
Como alternativa, se você não deseja adicionar o require "bundler/setup"
adicional na parte superior do seu aplicativo, você pode, em vez de invocação Sinatra via bundle exec
(por exemplo bundle exec ruby myapp.rb
)
Isso pressupõe que você tem um Gemfile
na raiz da sua aplicação. Ele pode ter esta aparência:
source "http://rubygems.org"
gem "sinatra"
Isso também pressupõe que você já instalou bundler (gem install bundler
) e que você correu bundle install
para instalar todas as dependências gema.
Como a minha resposta original era bastante antigo, mas parece haver ainda a atenção para este tema aqui é a versão mais recente do bundler setup / sinatra que cobrirá a maior parte do caso de uso:
A config.ru
mínima
require './my_sinatra_app'
run MySinatraApp
Um arquivo de ambiente env.rb
que requer todas as pedras preciosas empacotados (também suporta o carregamento de grupo do ambiente atual):
require 'bundler/setup'
APP_ENV = ENV["RACK_ENV"] || "development"
Bundler.require :default, APP_ENV.to_sym
Em seguida, o arquivo de aplicativo (que exige o meio ambiente) com a sua aplicação Sinatra (Sinatra::Base
):
require_relative 'env'
class MyApp < Sinatra::Base
get "/" do
"hello world"
end
end
Comece o seu servidor de desenvolvimento com rackup, e Sinatra será carregado via Bundler, seu aplicativo estará acessível a partir http: // localhost: 9292 .
$ rackup
ou bundle exec rackup
se necessário
Certifique-se de que você tem um Gemfile como a seguinte e você corre o comando bundle
antes de iniciar o aplicativo
source "https://rubygems.org"
gem "sinatra"
gem "puma" # a better rack server than the default webrick
1 para a href="http://gembundler.com/sinatra.html" guia no site bundler , mas se você tiver um aplicativo simples e usar Sinatra DSL no nível superior, então você precisa fazer o seguinte:
no seu Gemfile (dizer bundler não exigem Sinatra):
gem 'sinatra', :require => false
e no arquivo do aplicativo (explicitamente exigem Sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
Para usar bundler com um aplicativo de Sinatra, você só precisa fazer duas coisas. Primeiro, crie um Gemfile.
gem 'sinatra'
Em seguida, configure seu arquivo config.ru para carregar o pacote antes de carregar a sua aplicação Sinatra.
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
Comece o seu servidor de desenvolvimento com rackup, e Sinatra será carregado via Bundler.
rackup