Ruby on rails XMLRPC::日期时间格式
我正在从事一个Rails项目,该项目需要使用XMLRPC协议来访问Trac数据库 在我需要使用Ruby on rails XMLRPC::日期时间格式,ruby-on-rails,datetime,parameters,xml-rpc,trac,Ruby On Rails,Datetime,Parameters,Xml Rpc,Trac,我正在从事一个Rails项目,该项目需要使用XMLRPC协议来访问Trac数据库 在我需要使用XMLRPC::DateTime参数发出请求之前,一切都很正常。现在,当我去加载页面时,我得到了错误消息: Wrong content-type (received 'application/xml' but expected 'text/xml') 我尝试过用一系列不同的方式格式化日期参数(如下所列),但似乎没有任何效果 我试过: - @date = Time.now #=> (Tue
XMLRPC::DateTime
参数发出请求之前,一切都很正常。现在,当我去加载页面时,我得到了错误消息:
Wrong content-type (received 'application/xml' but expected 'text/xml')
我尝试过用一系列不同的方式格式化日期参数(如下所列),但似乎没有任何效果
我试过:
- @date = Time.now #=> (Tue Jul 10 10:18:01 -0700 2012)
- @date = DateTime.now #=> (2012-07-10T10:17:37-07:00)
- @date = Time.now.to_datetime #=> (2012-07-10T10:19:24-07:00)
- @date = XMLRPC::Convert.dateTime(Time.now.to_datetime.to_s) #=>
#<XMLRPC::DateTime:0x1276aa068>
(The above hex number changes each time the page is refreshed)
你正在使用的gem已经两年多没有更新了。我之所以提到这一点,是因为随着年龄的增长,由于Ruby的XMLRPC中可能发生的更改,gem的某些功能可能不再起作用(我将不得不挖掘更多以找到这方面的证据) 我不喜欢的是这种方法 然后将该字符串传递给
XMLRPC::Client
实例的方法
在XMLRPC::Client
的call
方法中,上述字符串被传递到XMLRPC::Create
中。如果查看该方法的源代码,您将看到它尝试为传递的每个参数生成有效的XML元素
parameter = params.collect do |param|
@writer.ele("param", conv2value(param))
end
这将生成单个
元素,如
<param>
<value>
<string>max=1000&created_at=2012-07-10T13:58:13-04:00</string>
</value>
</param>
由于在=…
<?xml version="1.0" ?>
<methodCall>
<methodName>ticket.query</methodName>
<params>
<param>
<value>
<string>max=1000&created_at=2012-07-10T13:58:13-04:00</string>
</value>
</param>
</params>
</methodCall>
你正在使用的gem已经两年多没有更新了。我之所以提到这一点,是因为随着年龄的增长,由于Ruby的XMLRPC中可能发生的更改,gem的某些功能可能不再起作用(我将不得不挖掘更多以找到这方面的证据) 我不喜欢的是这种方法 然后将该字符串传递给
XMLRPC::Client
实例的方法
在XMLRPC::Client
的call
方法中,上述字符串被传递到XMLRPC::Create
中。如果查看该方法的源代码,您将看到它尝试为传递的每个参数生成有效的XML元素
parameter = params.collect do |param|
@writer.ele("param", conv2value(param))
end
这将生成单个
元素,如
<param>
<value>
<string>max=1000&created_at=2012-07-10T13:58:13-04:00</string>
</value>
</param>
由于在=…
<?xml version="1.0" ?>
<methodCall>
<methodName>ticket.query</methodName>
<params>
<param>
<value>
<string>max=1000&created_at=2012-07-10T13:58:13-04:00</string>
</value>
</param>
</params>
</methodCall>
0x1276aa068
就是XMLRPC::DateTime
类实例的直接十六进制值。每个新实例(即使传递了相同的属性)都将具有不同的标识值。谢谢-我现在明白了。但您知道为什么在将@date作为参数传递时会出现此内容类型错误吗?我相信YYYY-MM-DDThh:MM:ss
格式对于XML中的日期时间是正确的。您是否尝试过DateTime.now.to_s
(获取字符串而不是DateTime对象)?是的-它仍然会给您带来相同的问题!我将继续搜索片刻……您能在实际使用@date
的地方发布代码吗?0x1276aa068
就是XMLRPC::DateTime
类实例的直接十六进制值。每个新实例(即使传递了相同的属性)都将具有不同的标识值。谢谢-我现在明白了。但您知道为什么在将@date作为参数传递时会出现此内容类型错误吗?我相信YYYY-MM-DDThh:MM:ss
格式对于XML中的日期时间是正确的。您是否尝试过DateTime.now.to_s
(获取字符串而不是DateTime对象)?是的-它仍然会给您带来相同的问题!我会一直搜索的…你能把代码贴在实际使用的@date
位置吗?太棒了-非常感谢!我会试一试,然后带着结果回来。只是让你知道——这就是问题所在。我为自己的应用程序克隆并修改了gem,现在一切正常。再次感谢!伟大的你可以接受我对你问题的回答,如果它解决了你的问题。如果你的存储库是公共的(例如,在github上分叉),那么发布一个链接也可能会帮助其他人。这太棒了-非常感谢!我会试一试,然后带着结果回来。只是让你知道——这就是问题所在。我为自己的应用程序克隆并修改了gem,现在一切正常。再次感谢!伟大的你可以接受我对你问题的回答,如果它解决了你的问题。如果您的存储库是公共的(例如,在github上分叉),那么发布一个指向该存储库的链接可能也会对其他人有所帮助。
<?xml version="1.0" ?>
<methodCall>
<methodName>ticket.query</methodName>
<params>
<param>
<value>
<string>max=1000</string>
</value>
</param>
<param>
<value>
<string>created_at=2012-07-10T13:58:13-04:00</string>
</value>
</param>
</params>
</methodCall>
writer = XMLRPC::Create.new
writer.methodCall('ticket.query', "max=1000", "created_at=2012-07-10T13:58:13-04:00")