web-dev-qa-db-ja.com

シナトラ+バンドラー?

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

37
khelll

最善の方法は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
11
khelll

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依存関係をインストールしていることも前提としています。

48
Ryan McGeary

私の元の答えはかなり古いものでしたが、このトピックにはまだ注意が払われているようです。これは、ほとんどのユースケースをカバーする最新バージョンのバンドラー/シナトラセットアップです。

最小限の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
10
makevoid

バンドラーWebサイトのガイド の+1ですが、単純なアプリがあり、トップレベルでSinatraのDSLを使用している場合は、次の手順を実行する必要があります。

あなたのGemfileで(バンドラーにシナトラを必要としないことを伝えてください):

gem 'sinatra', :require => false

およびアプリのファイル内(明示的にsinatraが必要):

require 'rubygems'
require 'bundler'
Bundler.require
require 'sinatra'

get '/' do
  'hello world'
end
8

Sinatraアプリケーションでbundleを使用するには、2つのことを行うだけで済みます。まず、Gemfileを作成します。

gem 'sinatra'

次に、Sinatraアプリをロードする前にバンドルをロードするようにconfig.ruファイルを設定します。

require 'rubygems'
require 'bundler'

Bundler.require

require './my_sinatra_app'
run MySinatraApp

ラックアップで開発サーバーを起動すると、SinatraがBundlerを介してロードされます。

rackup

ソースバンドラードキュメント

0
theterminalguy