シナトラでBundlerをどのように使用できるのか疑問に思います。アイデアは、Bundlerが.gemsフォルダー内にダウンロードした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
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"
これは、bundle(gem install bundler
)がすでにインストールされており、bundle install
を実行してすべてのgem依存関係をインストールしていることも前提としています。
私の元の答えはかなり古いものでしたが、このトピックにはまだ注意が払われているようです。これは、ほとんどのユースケースをカバーする最新バージョンのバンドラー/シナトラセットアップです。
最小限のconfig.ru
require './my_sinatra_app'
run MySinatraApp
バンドルされているすべてのgemを必要とする環境env.rb
ファイル(現在の環境のグループのロードもサポート):
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
ラックアップで開発サーバーを起動すると、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
バンドラーWebサイトのガイド の+1ですが、単純なアプリがあり、トップレベルでSinatraのDSLを使用している場合は、次の手順を実行する必要があります。
あなたのGemfileで(バンドラーにシナトラを必要としないことを伝えてください):
gem 'sinatra', :require => false
およびアプリのファイル内(明示的にsinatraが必要):
require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'
get '/' do
'hello world'
end
Sinatraアプリケーションでbundleを使用するには、2つのことを行うだけで済みます。まず、Gemfileを作成します。
gem 'sinatra'
次に、Sinatraアプリをロードする前にバンドルをロードするようにconfig.ruファイルを設定します。
require 'rubygems'
require 'bundler'
Bundler.require
require './my_sinatra_app'
run MySinatraApp
ラックアップで開発サーバーを起動すると、SinatraがBundlerを介してロードされます。
rackup