Sinatra + Bundler?

khe*_*lll 37 ruby sinatra bundler

我想知道如何使用Bundler与Sinatra.我们的想法是使用Bundler在.gems文件夹中下载的gem.

Rya*_*ary 47

在Sinatra应用程序中,您只需要设置捆绑器:

require "bundler/setup"
require "sinatra"

get "/" do
  "Hello world!"
end
Run Code Online (Sandbox Code Playgroud)

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

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

source "http://rubygems.org"

gem "sinatra"
Run Code Online (Sandbox Code Playgroud)

这也假设您已经安装了bundler(gem install bundler)并且您已经运行bundle install以安装所有gem依赖项.

  • 如果您使用Bundler.require:defaults,则无需手动要求'sinatra'或其他宝石 (2认同)

khe*_*lll 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
Run Code Online (Sandbox Code Playgroud)


mak*_*oid 10

由于我原来的答案很老,但似乎仍然关注这个主题,这是最新版本的bundler/sinatra设置,它将涵盖大部分用例:

最小的 config.ru

require './my_sinatra_app'
run MySinatraApp
Run Code Online (Sandbox Code Playgroud)

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

require 'bundler/setup'

APP_ENV = ENV["RACK_ENV"] || "development"

Bundler.require :default, APP_ENV.to_sym
Run Code Online (Sandbox Code Playgroud)

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

require_relative 'env'

class MyApp < Sinatra::Base
  get "/" do
    "hello world"
  end
end
Run Code Online (Sandbox Code Playgroud)

使用rackup启动开发服务器,并通过Bundler加载Sinatra,您的应用程序可从http:// localhost:9292访问.

$ rackup
Run Code Online (Sandbox Code Playgroud)

或者bundle exec rackup如果需要的话

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

source "https://rubygems.org"

gem "sinatra"

gem "puma" # a better rack server than the default webrick
Run Code Online (Sandbox Code Playgroud)


Eug*_*kov 8

在bundler网站上获得指南 +1 ,但如果您有一个简单的应用程序并在顶层使用Sinatra的dsl,那么您需要执行以下操作:

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

gem 'sinatra', :require => false
Run Code Online (Sandbox Code Playgroud)

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

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

get '/' do
  'hello world'
end
Run Code Online (Sandbox Code Playgroud)