1

Bundler のセットアップを取得しようとしているので、Sinatra アプリをすべての正しい gem でサーバーにデプロイできます。

Gemfile を作成しました

source :gemcutter
gem 'sinatra', '1.0'
gem "nokogiri", "1.4.2"
gem "rack",  "1.1.0"
gem "dm-core",  "1.0.0"
gem "dm-migrations",  "1.0.0"
gem "dm-sqlite-adapter",  "1.0.0"
gem "pony", "1.0"

次に、Config.ruを作成しました

require 'rubygems'
require 'bundler'
Bundler.setup

require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'dm-sqlite-adapter'
require 'open-uri'
require 'nokogiri'
require 'csv'
require 'pony'
require 'parsedate'
require 'digest/md5'

require 'MyApp'
run MyApp

ここまではとても良かったので、次に実行bundle installして「Bundle Complete」を取得したので、あとは次の作業を行うだけですRackup

それから私は得る:

config.ru:18: undefined local variable or method `MyApp' for #<Rack::Builder:0x1227350 @ins=[]> (NameError)
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `instance_eval'
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `initialize'
from config.ru:1:in `new'
from config.ru:1

これは、同じエラーをトリガーする単純な MyApp.rb です。

get '/' do
  erb :index
end

何がうまくいかないのですか?:(

4

3 に答える 3

9

Rack に を指定する場合はrun MyApp、最初にクラス MyApp を定義する必要があります (これは MyApp.rb 内で行う必要があります)。Sinatra::Base からクラスを派生させて、config.ru から実行できる Sinatra-Rack-App にします。

require 'sinatra/base'
class MyApp < Sinatra::Base
  get '/' do
    erb :index
  end
end

モジュラー Sinatra アプリに関する Sinatra の README も参照してください ( http://github.com/sinatra/sinatra/で「Modular Apps」という名前の段落を検索してください) 。

于 2010-08-03T21:05:52.033 に答える
0

モジュラー アプリを作成する (Sinatra メソッドを を拡張するクラスにラップするSinatra::Base) 代わりに、以下を使用できます。

run Sinatra::Application

config.ruファイルの代わりに

run MyApp

シンプルな Sinatra コードを維持したい場合は、これがより良いオプションかもしれません。

詳細については、ドキュメントを参照してください

于 2011-09-23T02:38:43.110 に答える
0

さらに、次のようにmy_app.rbがある場合があります。

require 'rubygems'
require 'bundler'
Bundler.setup

require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'dm-sqlite-adapter'
require 'open-uri'
require 'nokogiri'
require 'csv'
require 'pony'
require 'parsedate'
require 'digest/md5'

そして、あなたのconfig.ruは次のようになります:

require './my_app'
run Rack::URLMap.new '/' => Sinatra::Application

お役に立てれば。

よろしくお願いします

ED

于 2011-09-19T17:09:24.970 に答える