2016-05-02 46 views
0

我想從一個獨立的文件來啓動一個簡單的PROC:架:從推出一個獨立的文件中的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變種,似乎是不可見在config.ru裏面。因此,錯誤日誌內出現以下內容Message from application: missing run or map statement (RuntimeError)我該如何處理?

+0

你可以封裝在一個模塊中定義的方法PROC,然後調用該模塊的方法? – Sam

+0

@Sam,yeap。有用! – DreamWalker

+0

偉大的:)你可以把你的方法和接受你自己的答案,所以這個Q被標記爲已解決請。 – Sam

回答

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 
相關問題