Ruby on rails XMLRPC::日期时间格式

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

我正在从事一个Rails项目,该项目需要使用XMLRPC协议来访问Trac数据库

在我需要使用
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&amp;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&amp;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&amp;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&amp;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")