ruby - Sinatra 和 bundler

标签 ruby rubygems sinatra rack bundler

我正在尝试设置 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

怎么了? :(

最佳答案

如果您告诉 Rack 运行 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 应用程序的自述文件(在 http://github.com/sinatra/sinatra/ 上搜索名为“模块化应用程序”的段落)

关于ruby - Sinatra 和 bundler ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392375/

相关文章:

postgresql - 使用 activerecord-postgis-adapter 并且点未转换为球形

ruby - Sinatra 应用程序中的错误 "undefined local variable or method ` logger '"when using ` logger.info`

ruby - validates_confirmation_of :password

ruby - 错误:启动 jekyll 服务器时未初始化常量 FFI::Platform::CPU

ruby - 通过 Sinatra 上传图片

ruby - Rails 5 数据库迁移:如何修复 ActiveRecord::ConcurrentMigrationError

javascript - 是否可以在 Ruby Shoes 中打开浏览器窗口?

ruby-on-rails - 在 Rails 4 中组织外部 API 调用 - 模块还是类?

python - 不同的 YAML 数组表示

ruby - 了解 Gemfile.lock 文件