Sinatra + Bundler?

37

我想知道如何在Sinatra中使用Bundler。这个想法是使用Bundler下载到的gem,位于.gems文件夹内。


3
Yehuda Katz撰写了一篇关于如何使用bundler的好文章:http://yehudakatz.com/2009/11/03/using-the-new-gem-bundler-today/ - Damien MATHIEU
1
此外,Bundler文档本身有一个很好的示例,展示如何设置Sinatra应用程序 http://gembundler.com/sinatra.html ,并且它是最新的。 - christophercotton
5个回答

48

在Sinatra应用程序内,您只需要要求bundler设置:

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"

这还假设您已经安装了包管理器bundler (gem install bundler),并运行bundle install以安装所有gem依赖项。


3
如果你使用 Bundler.require :defaults,就不需要手动 require 'sinatra' 或其他的 gems。 - makevoid

11

我认为最好的方法在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

10

由于我的原始回答相当旧,但似乎仍然有关注这个主题,这里是捆绑程序/bundler安装的最新版本,它将涵盖大多数用例:

一个最小的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

8
在Gemfile文件中(告诉Bundler不要加载Sinatra):

对于在顶层使用Sinatra DSL的简单应用程序,建议参考Bundler网站上的指南 (此处链接需要自行访问),但您仍需执行以下步骤:

gem 'sinatra', :require => false

同时,在应用的文件中(明确需要引用 Sinatra):

require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'

get '/' do
  'hello world'
end

0
使用bundler与Sinatra应用程序只需要做两件事。首先,创建一个Gemfile。 gem 'sinatra' 然后,在config.ru文件中设置加载bundle的顺序,以便在加载Sinatra应用程序之前加载它。
require 'rubygems'
require 'bundler'

Bundler.require

require './my_sinatra_app'
run MySinatraApp

使用rackup启动开发服务器,Sinatra将通过Bundler加载。

rackup

查看Bundler文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接