假设我正在为已经拥有People应用程序的出版公司编写一个Library应用程序.
所以在我的图书馆应用程序中我有
class Person < ActiveResource::Base
self.site = "http://api.people.mypublisher.com/"
end
Run Code Online (Sandbox Code Playgroud)
现在我想Article
为每个存储s Person
:
class Article < ActiveRecord::Base
belongs_to :person, :as => :author
end
Run Code Online (Sandbox Code Playgroud)
我想我的数据库中有以下表格:
Articles
id (PK) | title (string) | body (text) | author_id (integer)
Run Code Online (Sandbox Code Playgroud)
author_id
不完全是外键,因为我没有People表.这留下了几个问题:
我怎么告诉我的Person
ActiveResource
对象呢has_many
Articles
?
会Articles.find(:first).author
工作吗?会belongs_to
甚至工作因为没有ActiveRecord
,没有支撑台?
我的应用程序中有一条路径是这样的:
/deployments/:id/logs.json
Run Code Online (Sandbox Code Playgroud)
它用于检索特定部署的日志.在我的客户端代码,基于ActiveResource我有这个:
logs = Deployment.find(deployment.id).get(:logs, opts)
Run Code Online (Sandbox Code Playgroud)
其中opts是我通过查询字符串发送的一些参数.
这段代码的问题在于它将请求分成两部分.该Deployment#find
方法请求:
GET /deployments/:id.json
Run Code Online (Sandbox Code Playgroud)
然后,如果找到,则发送第二个请求:
GET /deployments/:id/logs.json
Run Code Online (Sandbox Code Playgroud)
是否可以使用服务器上的Rails 3和ActiveResource完全跳过第一个查询(activeresource的当前要求是> = 2.3.5但如果需要可以碰到它)?
更新:我认为如果我改变它是有效的:
logs = Deployment.find(deployment.id).get(:logs, opts)
Run Code Online (Sandbox Code Playgroud)
至
logs = Deployment.new(:id => deployment.id).get(:logs, opts)
Run Code Online (Sandbox Code Playgroud)
任何意见?
我正在尝试使用Basecamp Classic API(http://developer.37signals.com/basecamp/comments.shtml).当前的basecamp-wrapper版本给了我适合,其中一个原因是因为json响应包括分页输出,而xml响应包括分页输出.这是一个简单的解决方案,但问题是网址结构不规范.
API指定了一些类似的东西,这使我相信它只是分离出元素路径和集合路径.
Run Code Online (Sandbox Code Playgroud)Get recent comments (for a commentable resource) GET /#{resource}/#{resource_id}/comments.xml Update comment PUT /comments/#{id}.xml
我已经做了几次尝试,并没有真正成功.尝试处理这样的注释充其量只是hacky,并且实际上并不起作用,因为element_path与collection_path不同.
class Resource < ActiveResource::Base
self.site = "https://XXXX.basecamphq.com"
self.user = "XXXX"
self.password = "X" # This is just X according to the API, I have also read nil works
self.format = :xml # json responses include pagination crap
# Override element path so it isn't nested
class << self
def element_path(id, prefix_options={}, query_options={})
prefix_options, query_options = split_options(prefix_options) if query_options.nil?
"#{collection_name}/#{URI.parser.escape id.to_s}.#{format.extension}#{query_string(query_options)}" …
Run Code Online (Sandbox Code Playgroud) 默认情况下,ActiveResource客户端在每个http请求中向restful api发送用户名/密码.我们是否可以将其配置为使用会话ID进行交互,以便在客户端和restful服务器之间维护会话.
session client-server activeresource session-cookies ruby-on-rails-3
我有这样的路线:
/orders/preview
Run Code Online (Sandbox Code Playgroud)
它返回类似:
<order><total>100</total></order>
Run Code Online (Sandbox Code Playgroud)
我想将此方法添加到活动资源类中。做这个的最好方式是什么?
我开始做这样的事情:
class Order < ActiveResource::Base
def self.preview(params = {})
post(:preview, params)
end
end
Run Code Online (Sandbox Code Playgroud)
这似乎可行,但是我得到的是Net::HTTP
回复,而不是Order
对象。我究竟做错了什么?
我有一个Web应用程序,该应用程序使用ActiveResource与另一台具有连接速率限制的服务器通信。我很好奇如何才能最好地从运行我的Web应用程序的主机上进行监视,即从服务器上linux上的bash提示符下,如何测量我的计算机每秒向另一台计算机发出的出站请求?
我正在寻找给定接口,主机名和/或它们的某种组合的Linux单行程序,它告诉我与该服务器的连接速率。我已经接近使用tc和iftop之类的工具,但是这些工具报告的是所传输的数据量,而不是所建立的连接……所以它并不是我所要寻找的。我很想看类似的东西:
$ awesometool --host thetargethost.com --interface eth0 --interval 5
收集统计数据…
接口eth0上针对targethost.com的每秒请求报告
平均:23请求/秒最小值:12请求/秒最大值39请求/秒
抽取了5个样本
谁能指出我一个人?
我正在构建一个sinatra应用程序,它将使用Highrise CRM gem访问Highrise数据.从wiki中使用这个gem的示例代码,
require 'highrise'
Highrise::Base.site = 'https://your_site.highrisehq.com'
Highrise::Base.user = 'api-auth-token'
Run Code Online (Sandbox Code Playgroud)
我想为每个请求更改用户和站点字段,因为每个请求可以针对不同的用户.目前这些是类变量.即使我为每个请求设置了这些字段,当多线程场景中有多个请求时,这不会导致竞争条件吗?有人可以建议以线程安全的方式为每个请求设置用户/站点字段的最佳实践吗?
我们目前在我们的网络中有三个站点.一个用Ruby on Rails编写,另外两个用PHP编写.所有站点都倾向于共享许多相同的数据和逻辑.我发现自己不得不在PHP端重复我在rails上做的很多工作.似乎我们需要一个通用的内部API来巩固它.我以前从未构建过API,但我有几个问题.
性能如果我将API构建为单独的应用程序,似乎这将是两倍的速度.因为它必须经过API端的整个请求/响应周期,然后再次在公共应用程序端.有没有办法让这更快?或者可能采用不同的方法?
通过本地网络访问API如何通过本地网络访问API?我会在Apache中设置一个指向127.0.0.1的虚拟主机吗?
主动资源在我的情况下(在rails端),ActiveResource是最好的方法,还是有更好的消费API的选择?我也想知道验证如何在公共方面起作用.ActiveResource是重用验证规则还是我必须在公共端重新创建它们?
API安全性我认为我现在不必过于担心这一点,因为API只能通过本地网络访问(理想情况下).我在这个假设中是否正确?
所以我有一个早期不需要ActiveRecord的应用程序 - 因此我们从应用程序中删除了ActiveRecord并将我们的日志记录格式化为:
在application.rb中:
class DreamLogFormatter < Logger::Formatter
SEVERITY_TO_COLOR_MAP = {'DEBUG'=>'32', 'INFO'=>'0;37', 'WARN'=>'35', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}
def call(severity, time, progname, msg)
color = SEVERITY_TO_COLOR_MAP[severity]
"\033[0;37m[%s] \033[#{color}m%5s - %s\033[0m\n" % [time.to_s(:short), severity, msg2str(msg)]
end
end
class ActiveSupport::BufferedLogger
def formatter=(formatter)
@log.formatter = formatter
end
end
Run Code Online (Sandbox Code Playgroud)
在development.rb
config.logger = Logger.new("log/#{Rails.env}.log")
config.logger.formatter = DreamLogFormatter.new
ActiveResource::Base.logger = Logger.new("log/#{Rails.env}.log")
ActiveResource::Base.logger.formatter = DreamLogFormatter.new
Run Code Online (Sandbox Code Playgroud)
注意:添加了ActiveResource记录器配置,因为我们希望我们的ActiveResource调用的URL输出如下:
GET http://localhost:2524/users/
--> 200 OK 239 (13.0ms)
Run Code Online (Sandbox Code Playgroud)
使用此配置进行日志记录为我们提供了一个很好的输出组合,即ActiveResource调用和我们自己的日志记录Rails.logger
.
但是,我们需要将ActiveRecord添加回我们的应用程序,因为我们需要将会话存储从cookie存储更改为ActiveRecord存储.自从重新添加ActiveRecord以来,日志记录不再有效.
以前的日志输出:
Started GET "/audit/?key1=value1&key2=value2" for 0:0:0:0:0:0:0:1%0 at 2012-08-15 15:39:58 -0400
[15 …
Run Code Online (Sandbox Code Playgroud) logging activerecord ruby-on-rails activeresource ruby-on-rails-3.1
我已经将rails应用程序配置为使用Active资源来使用Redmine api.在我的模型redmine.rb中,我输入以下代码
require 'active_resource'
class Redmine < ActiveResource::Base
self.site = "http://localhost:9000/"
self.format = :json
self.element_name = "issues"
self.user = "admin"
self.password = "admin"
end
Run Code Online (Sandbox Code Playgroud)
在我的控制器
def index
@data = Redmine.find(:all)
end
Run Code Online (Sandbox Code Playgroud)
但它显示参数错误ArgumentError在预期的属性Hash,得到并显示带有此错误的json数据.
如何摆脱这个错误,我正在使用
gem 'activeresource', :require => 'active_resource'
Run Code Online (Sandbox Code Playgroud)
但是当我使用XML解析时它没有显示任何错误,那么我认为问题在于json解析.请帮我搞清楚.
activeresource ×10
ruby ×3
activerecord ×2
api ×2
rest ×2
basecamp ×1
highrise ×1
internal ×1
linux ×1
logging ×1
networking ×1
session ×1
sinatra ×1