我想知道如何在Sinatra中使用Bundler。这个想法是使用Bundler下载到的gem,位于.gems文件夹内。
我想知道如何在Sinatra中使用Bundler。这个想法是使用Bundler下载到的gem,位于.gems文件夹内。
在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依赖项。
我认为最好的方法在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安装的最新版本,它将涵盖大多数用例:
一个最小的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
对于在顶层使用Sinatra DSL的简单应用程序,建议参考Bundler网站上的指南 (此处链接需要自行访问),但您仍需执行以下步骤:
gem 'sinatra', :require => false
同时,在应用的文件中(明确需要引用 Sinatra):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
gem 'sinatra'
然后,在config.ru文件中设置加载bundle的顺序,以便在加载Sinatra应用程序之前加载它。require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
使用rackup启动开发服务器,Sinatra将通过Bundler加载。
rackup