我想知道如何将Bundler与Sinatra一起使用。我们的想法是使用Bundler在.gems文件夹中下载的宝石。
答案 0 :(得分:47)
在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"
这也假设您已经安装了bundler(gem install bundler
)并且运行了bundle install
来安装所有gem依赖项。
答案 1 :(得分:11)
我认为最好的方法是在EngineYard博客上描述here:
# 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
答案 2 :(得分:10)
由于我原来的答案已经很老了,但似乎仍然关注这个主题,这是最新版本的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启动您的开发服务器,并通过Bundler加载Sinatra,您的应用程序可以从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
答案 3 :(得分:8)
+1 guide on the bundler website,但如果您有一个简单的应用并在顶层使用Sinatra的dsl,那么您需要执行以下操作:
你的Gemfile中的(告诉bundler不要求sinatra):
gem 'sinatra', :require => false
并在应用程序的文件中(明确要求sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
答案 4 :(得分:0)
要将Bundler与Sinatra应用程序一起使用,您只需要做两件事。首先,创建一个Gemfile。
gem 'sinatra'
然后,在加载Sinatra应用程序之前,设置config.ru文件以加载包。
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
使用rackup启动开发服务器,并通过Bundler加载Sinatra。
rackup