質問

Sinatra で Bundler をどのように使用できるのか疑問に思っています。このアイデアは、Bundler が .gems フォルダー内にダウンロードした gem を使用することです。

役に立ちましたか?

解決 2

最善の方法が説明されていると思います ここ 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

他のヒント

あなたのシナトラアプリの内部では、あなただけのバンドラのセットアップを必要とする必要があります:

require "bundler/setup"
require "sinatra"

get "/" do
  "Hello world!"
end
アプリの一番上に追加require "bundler/setup"を追加したくない場合は、

あるいは、あなたが代わりにbundle exec経由シナトラを呼び出すことができます(例えばbundle exec ruby myapp.rb

これは、あなたのアプリケーションのルートにGemfileを持っていることを前提としています。それは次のようになります。

source "http://rubygems.org"

gem "sinatra"

これはまた、あなたがすべての宝石の依存関係をインストールするgem install bundler実行されたことをすでにバンドラ(bundle install)をインストールしていることを前提とします。

私のオリジナルの答えはかなり古いでしたが、それでもこの話題に関心があるように思われるここでのユースケースのほとんどをカバーしますバンドラ/シナトラセットアップの最新バージョンだとして:

は、

最小config.ru

require './my_sinatra_app'
run MySinatraApp

すべてのバンドルの宝石を(も現在の環境のグループをロードサポート)が必要です環境env.rbファイルます:

require 'bundler/setup'

APP_ENV = ENV["RACK_ENV"] || "development"

Bundler.require :default, APP_ENV.to_sym

次に、あなたのシナトラアプリ(Sinatra::Base)とアプリのファイル(環境を必要とする):

require_relative 'env'

class MyApp < Sinatra::Base
  get "/" do
    "hello world"
  end
end

あなたのアプリは HTTPからアクセスできるようになり、rackupと開発サーバーを起動し、シナトラはバンドラーによってロードされます:// localhostを: 9292 に。

$ rackup

またはbundle exec rackup必要に応じて

次のようなGemfileを持っていて、アプリを起動する前にbundleコマンドを実行していることを確認してください。

source "https://rubygems.org"

gem "sinatra"

gem "puma" # a better rack server than the default webrick
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top