我想从独立文件中启动一个简单的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)
中会出现以下内容我该如何处理?
答案 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