我正在尝试编写我的第一个 Rack 中间件。并且需要帮助。我想要找到请求者 IP 的中间件,如果它在允许的 IP 列表中,则继续请求,否则中止。
棘手的部分是我需要它在你不能使用 request.ip 的 heroku 上工作:http://developerhemal.tumblr.com/post/3958107290/client-ip-addresses-on-heroku
所以我有以下内容:
class RestrictIP
def initialize(app, message = "Hello")
@app = app
@message = message
end
def call(env)
dup._call(env)
@ip = env['HTTP_X_REAL_IP'] ||= env['REMOTE_ADDR']
end
def each(&block)
block.call("<!-- #{@ip} -->\n")
@response.each(&block)
end
end
此错误:
NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]=):
对于我的第一次迭代,我只是想确保我可以获取请求者的 IP 并将其放在 html 文档中。
那里有 Rack 中间件专家吗?谢谢
最佳答案
根据 this post ,看来您可以使用以下内容:
ip = env[‘HTTP_X_REAL_IP’] ||= env[‘REMOTE_ADDR’]
我没有测试过这个,因为我不在 Heroku 上。
关于ruby-on-rails - 构建获取 IP 的中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112604/