Sinatra + Bundler?

我想知道如何使用与西纳特拉Bundler。 这个想法是使用Bundler在.gems文件夹下载的gem。

在您的Sinatra应用程序内,您只需要安装打包程序:

require "bundler/setup" require "sinatra" get "/" do "Hello world!" end 

或者,如果您不想在应用程序的顶部添加额外的require "bundler/setup" ,则可以通过bundle exec调用sinatra(例如bundle exec ruby myapp.rb

这假定您的应用程序的根目录中有一个Gemfile 。 它可能看起来像这样:

 source "http://rubygems.org" gem "sinatra" 

这也假定您已经安装了捆绑软件( gem install bundler ),并且运行了bundle install来安装所有的gem依赖。

我相信在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 

由于我的原始答案是相当古老的,但似乎仍然关注这个话题这里是最新版本的bundler / sinatra设置将覆盖大部分的用例:

最小的config.ru

 require './my_sinatra_app' run MySinatraApp 

环境env.rb文件,需要所有捆绑的gem(也支持加载当前环境的组):

 require 'bundler/setup' APP_ENV = ENV["RACK_ENV"] || "development" Bundler.require :default, APP_ENV.to_sym 

然后你的应用程序文件(需要环境)与你的sinatra应用程序( Sinatra::Base ):

 require_relative 'env' class MyApp < Sinatra::Base get "/" do "hello world" end end 

用rackup启动你的开发服务器,Sinatra将通过Bundler加载,你的应用程序可以从http:// localhost:9292访问 。

 $ rackup 

或者在需要的时候bundle exec rackup

确保你有一个如下所示的Gemfile,然后在启动应用程序之前运行bundle命令

 source "https://rubygems.org" gem "sinatra" gem "puma" # a better rack server than the default webrick 

+1 在捆绑器网站上的指南 ,但如果你有一个简单的应用程序,并在顶层使用Sinatra的dsl,那么你需要做到以下几点:

在你的Gemfile中(告诉bundler不需要sinatra):

 gem 'sinatra', :require => false 

并在应用程序的文件(明确要求sinatra):

 require 'rubygems' require 'bundler' Bundler.require require 'sinatra' get '/' do 'hello world' end