Rack:从独立文件启动proc

时间:2016-05-02 18:46:18

标签: ruby rack

我想从独立文件中启动一个简单的proc:

# config.ru
require 'rack'
require File.expand_path '../app.rb', __FILE__
run @app

# app.rb
@app = Proc.new do |env| 
  [
    200,
    {'Content-Type'=> 'text/html'},
    ["<head><title>My app</title></head><body>Hello world</body>"]
  ]
end

但是这会导致范围问题 - 似乎在app.ru中看不到@app var。因此,错误日志Message from application: missing run or map statement (RuntimeError)中会出现以下内容我该如何处理?

1 个答案:

答案 0 :(得分:0)

解决方法是使用模块提供的方法,而不是使用instantce var:

#!/usr/bin/ruby
# app.rb
module AppModule
  def self.start_app
    Proc.new do |env| 
      [
        200,
        {'Content-Type'=> 'text/html'},
        ["<head><title>ENV VARS</title></head><body>#{ENV.sort.each {|k,v| puts "#{k}=#{v}"}}</body>"]
      ]
    end
  end
end

# config.ru
require 'rack'
require File.expand_path '../app.rb', __FILE__
run AppModule.start_app