Ở cấp độ ứng dụng, bạn có thể thêm này trong tập tin application_controller.rb bạn
before_filter :reject_methods
def reject_methods
if ['TRACE','PATCH'].include?(request.method)
#raise ActionController::RoutingError.new('Not Found')
raise ActionController::MethodNotAllowed.new('Method not allowed') #405
# or whatever you want to do (redirect, error message, ...)
end
end
Hoặc bạn có thể thử với https://github.com/jtrupiano/rack-rewrite (kiểm tra viết lại tùy ý) với một cái gì đó như thế này (không kiểm tra):
rewrite %r{(.*)}, lambda { |match, rack_env|
rack_env["REQUEST_METHOD"] == "TRACE" ? "405.html" : match[1]
}
Hoặc bạn có thể sử dụng bạn middleware riêng bằng cách đặt này trong một file ./lib:
module Rack
class RejectMethods
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
if env["REQUEST_METHOD"] == "TRACE" || env["REQUEST_METHOD"] == "PATCH"
body.close if body.respond_to? :close
[status, headers, []]
else
[status, headers, body]
end
end
end
end
và gọi nó trong application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.middleware.use "RejectMethods"
** Cập nhật: ** Heroku đã nhận được lại cho tôi nói rằng nó không thể ở đó kết thúc. Vì vậy, bây giờ nó là một câu hỏi về từ chối cấp ứng dụng. – Forrest
Điều này có ổn với Intuit hoặc bạn có di chuyển máy chủ không? –