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依赖项.
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)
在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)