我想知道如何将 Bundler 与 Sinatra 一起使用。这个想法是使用 Bundler 在 .gems 文件夹中下载的 gem。
5 回答
在您的 Sinatra 应用程序中,您只需要安装捆绑程序:
require "bundler/setup"
require "sinatra"
get "/" do
"Hello world!"
end
或者,如果您不想require "bundler/setup"
在应用顶部添加附加内容,您可以改为通过bundle exec
(例如bundle exec ruby myapp.rb
)调用 sinatra
这假设您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/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
要将 bundler 与 Sinatra 应用程序一起使用,您只需要做两件事。首先,创建一个 Gemfile。
gem 'sinatra'
然后,设置您的 config.ru 文件以在加载 Sinatra 应用程序之前加载该包。
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
使用 rackup 启动您的开发服务器,然后 Sinatra 将通过 Bundler 加载。
rackup