标签: activeresource

如何创建与ActiveResource对象的ActiveRecord关系?

假设我正在为已经拥有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表.这留下了几个问题:

  1. 我怎么告诉我的Person ActiveResource对象呢has_many Articles

  2. Articles.find(:first).author工作吗?会belongs_to甚至工作因为没有ActiveRecord,没有支撑台?

activerecord ruby-on-rails activeresource

5
推荐指数
2
解决办法
4147
查看次数

使用ActiveResource获取成员URL操作

我的应用程序中有一条路径是这样的:

/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)

任何意见?

ruby rest ruby-on-rails activeresource

5
推荐指数
1
解决办法
515
查看次数

如何将当前Basecamp API与ActiveResource一起使用?

我正在尝试使用Basecamp Classic API(http://developer.37signals.com/basecamp/comments.shtml).当前的basecamp-wrapper版本给了我适合,其中一个原因是因为json响应包括分页输出,而xml响应包括分页输出.这是一个简单的解决方案,但问题是网址结构不规范.

API指定了一些类似的东西,这使我相信它只是分离出元素路径和集合路径.

Get recent comments (for a commentable resource)
GET /#{resource}/#{resource_id}/comments.xml

Update comment
PUT /comments/#{id}.xml
Run Code Online (Sandbox Code Playgroud)

我已经做了几次尝试,并没有真正成功.尝试处理这样的注释充其量只是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)

api ruby-on-rails activeresource basecamp ruby-on-rails-3

5
推荐指数
1
解决办法
612
查看次数

Ruby on Rails:使用ActiveResource进行会话?

默认情况下,ActiveResource客户端在每个http请求中向restful api发送用户名/密码.我们是否可以将其配置为使用会话ID进行交互,以便在客户端和restful服务器之间维护会话.

session client-server activeresource session-cookies ruby-on-rails-3

5
推荐指数
1
解决办法
452
查看次数

向Active Resource类添加非静态的自定义方法的正确方法

我有这样的路线:

/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对象。我究竟做错了什么?

ruby ruby-on-rails activeresource

5
推荐指数
1
解决办法
1024
查看次数

每秒测量出站请求?

我有一个Web应用程序,该应用程序使用ActiveResource与另一台具有连接速率限制的服务器通信。我很好奇如何才能最好地从运行我的Web应用程序的主机上进行监视,即从服务器上linux上的bash提示符下,如何测量我的计算机每秒向另一台计算机发出的出站请求?

我正在寻找给定接口,主机名和/或它们的某种组合的Linux单行程序,它告诉我与该服务器的连接速率。我已经接近使用tc和iftop之类的工具,但是这些工具报告的是所传输的数据量,而不是所建立的连接……所以它并不是我所要寻找的。我很想看类似的东西:


$ awesometool --host thetargethost.com --interface eth0 --interval 5

收集统计数据…

接口eth0上针对targethost.com的每秒请求报告

平均:23请求/秒最小值:12请求/秒最大值39请求/秒

抽取了5个样本


谁能指出我一个人?

ruby linux networking activeresource

5
推荐指数
1
解决办法
1696
查看次数

设置站点/用户名字段ActiveResource基于高层宝石

我正在构建一个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)

我想为每个请求更改用户和站点字段,因为每个请求可以针对不同的用户.目前这些是类变量.即使我为每个请求设置了这些字段,当多线程场景中有多个请求时,这不会导致竞争条件吗?有人可以建议以线程安全的方式为每个请求设置用户/站点字段的最佳实践吗?

activeresource highrise sinatra

5
推荐指数
0
解决办法
234
查看次数

内部REST API

我们目前在我们的网络中有三个站点.一个用Ruby on Rails编写,另外两个用PHP编写.所有站点都倾向于共享许多相同的数据和逻辑.我发现自己不得不在PHP端重复我在rails上做的很多工作.似乎我们需要一个通用的内部API来巩固它.我以前从未构建过API,但我有几个问题.

  • 性能如果我将API构建为单独的应用程序,似乎这将是两倍的速度.因为它必须经过API端的整个请求/响应周期,然后再次在公共应用程序端.有没有办法让这更快?或者可能采用不同的方法?

  • 通过本地网络访问API如何通过本地网络访问API?我会在Apache中设置一个指向127.0.0.1的虚拟主机吗?

  • 主动资源在我的情况下(在rails端),ActiveResource是最好的方法,还是有更好的消费API的选择?我也想知道验证如何在公共方面起作用.ActiveResource是重用验证规则还是我必须在公共端重新创建它们?

  • API安全性我认为我现在不必过于担心这一点,因为API只能通过本地网络访问(理想情况下).我在这个假设中是否正确?

api internal activeresource ruby-on-rails-3

5
推荐指数
1
解决办法
1343
查看次数

使用ActiveRecord时格式化Rails日志

所以我有一个早期不需要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

5
推荐指数
1
解决办法
1668
查看次数

活动资​​源错误"ArgumentError在预期的属性哈希,得到"

我已经将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解析.请帮我搞清楚.

rest ruby-on-rails activeresource

5
推荐指数
0
解决办法
272
查看次数