【发布时间】:2011-06-05 22:06:38
【问题描述】:
我使用 Ruby on Rails 3,我有 2 个应用程序(APP1 和 APP2)在两个子域上工作:
- app1.domain.local
- app2.domain.local
我正在尝试从 APP1 到 APP2 运行两个连续的 HTTP GET 请求,如下所示:
APP1 中的代码(请求):
before_filter :run_request
def run_request
response1 = Net::HTTP.get( URI.parse("http://app2.domain.local?test=first&id=1") )
response2 = Net::HTTP.get( URI.parse("http://app2.domain.local/test=second&id=1") )
end
APP2中的代码(响应):
before_filter :run_response
def run_response
respond_to do |format|
if <model_name>.find(params[:id]).<field_name> == "first"
<model_name>.find(params[:id]).update_attribute ( <field_name>, <field_value> )
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
elsif <model_name>.find(params[:id]).<field_name> == "second"
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
end
end
end
在第一个请求之后,我得到了正确的 XML(response1 是我所期望的),但第二个不是(response2 不是我所期望的)。做一些测试,我发现<model_name>.find(params[:id]).<field_name> 第二次运行(对于 elsif 语句)它总是返回一个空白值,因此 elseif 语句中的代码永远不会运行。
问题是否可能与缓存<model_name>.find(params[:id]).<field_name>有关?
通知
如果我尝试这段代码
respond_to do |format|
if <model_name>.find(params[:id]).<field_name> == "first"
<model_name>.find(params[:id]).update_attribute ( <field_name>, <field_value> )
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
else
format.xml { render :xml => <model_name>.find(params[:id]) }
end
end
response2 是整个 <model_name>.find(params[:id] 对象。请注意,我删除了“elsif”条件(为了运行第二个请求,以便我可以得到 response2)并且我更改了代码
format.xml { render :xml => <model_name>.find(params[:id]) }
到
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
P.S.:我读到了 eTag and Conditional GET,但我不确定我是否必须使用这种方法。我想保持一切简单。
【问题讨论】:
-
您能否为该操作添加完整代码并修复第二个网址中的拼写错误?
-
代码“不在操作中”,但在 APP1(请求)和 APP2(响应)的“application_controller.rb”中。我有一个调用请求和响应的“before_filter”。
-
再一次,您应该在 APP2 上显示您的日志...
-
如何/在哪里可以在 APP2 上显示日志?
标签: ruby-on-rails http caching get request