小编oma*_*oma的帖子

使用真正的 XML 和 JSON 请求/响应自动测试 Rails 应用程序,作为 API 文档?

我应该善待我的 Web 服务消费者并为他们提供一些很好的示例,即使维护大型 xml 请求测试并不有趣。有没有更好的方法来成为一个好的 WS 提供者?

我没有html。该应用程序同时接受 XML 和 JSON,因此为了确保 API 示例(xml 和 json)的有效性,我想在集成套件中证明它们是正确的。

在你的回答中,我想看一些例子,而不是仅仅“尝试黄瓜/webrat/capybara”。没有html很难找到howto。感谢您的帮助!

xml integration-testing json ruby-on-rails

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

Sqlite3 activerecord:order =>"time DESC"不排序

rails 2.3.4,sqlite3

我正在尝试这个

Production.find(:all,:conditions => ["time>?",start_time.utc],:order =>"time DESC",:limit => 100)

条件完美的作品,但我在使用的问题:为了=>时间DESC.

偶然的机会,我发现它在Heroku(用heroku控制台测试)上运行,它运行PostgreSQL.但是,在本地,使用sqlite3,新条目将在旧条目之后排序,无论我设置的时间如何.像这样(输出已被手动剥离):第二个条目是新的:

生产编号:2053939460,时间:"2010-04-24 23:00:04",created_at:"2010-04-24 23:00:05"

制作编号:2053939532,时间:"2010-04-25 10:00:00",created_at:"2010-04-27 05:58:30"

生产编号:2053939461,时间:"2010-04-25 00:00:04",created_at:"2010-04-25 00:00:04"

生产编号:2053939463,时间:"2010-04-25 01:00:04",created_at:"2010-04-25 01:00:04"

似乎它对主键,id,而不是时间进行排序.请注意,查询在heroku上运行正常,返回正确排序的列表!我喜欢sqlite,它是如此亲吻,我希望你能帮助我......

有什么建议?


UPDATE/SOLVED: time是一个保留的sqlite3关键字(日期,其中也是如此).这就是为什么:order => 'time DESC'在PostgreSQL(非保留关键字)中工作,而不是在sqlite3中.解决方案是避免将sqlite3关键字用作列名,如果您打算对它们进行排序的话.重命名解决了这个问题.

我已经使用标准的rails模式updated_atcreated_at进行了测试,结果很好.

我仍然喜欢开发中的sqlite3,使用起来非常简单顺畅,复制数据库并发送给你的合作伙伴.感谢@newtover!

sqlite ruby-on-rails reserved-words

4
推荐指数
1
解决办法
4814
查看次数

我的rails应用程序外部端点的集成测试的良好实践?

我会保持简短,我有一个与其他应用程序通信的rails应用程序,有些使用SOAP(当然是非rails应用程序......)和其他有REST的应用程序.我正在进行集成测试,以确保我的端点包装器类具有正确的映射和设置.但是,它们默认执行,rake test这使它变得缓慢而脆弱.我希望经常进行单元测试,并且只能按需"进行集成测试".你是怎样做的?

您对此类集成测试的偏好是什么?

  • 你进行单元测试和/或模拟有多深?
  • 您是否在存根中复制整个SOAP或REST xml响应?
  • 您是否创建了"外部端点"集成测试?

更新问:如何在运行时排除test-dir rake test

ruby rake integration-testing ruby-on-rails

4
推荐指数
1
解决办法
1609
查看次数

将所有整数类型的主键更改为 bigint,包括引用

Rails 5.1 将主键的默认类型从integer 更改为 bigint。我们错过了这一点,现在我们得到了整数和 bigint 的混合结果。

我们应该在整数溢出再次袭击我们之前摆脱困境(其他项目,其他故事)。

我很乐意看到一个聪明的迁移脚本改变一切

  • 主键
  • 外键
  • 我们没有外键的引用(没关系,我们总是应该声明外键)?

列出整数类型主键的方法将是一个好的开始。

postgresql ruby-on-rails rails-activerecord

4
推荐指数
1
解决办法
1754
查看次数

我应该在mongodb中使用稀疏索引作为布尔标志吗?

我有一个布尔标志:finished.我是不是该

A: index({ finished: 1 })
B: index({ finished: 1 }, {sparse: true})
C: use flag :unfinished instead, to query by that
D: other?
Run Code Online (Sandbox Code Playgroud)

Ruby mongoid语法.我的大多数记录都会有flag finished = true,而且大多数操作显然都是未完成的.我不确定我是否理解何时使用稀疏,何时不使用.谢谢!

indexing mongodb mongoid

3
推荐指数
1
解决办法
4880
查看次数

heroku I18n语言环境与default_locale不同,在本地工作正常

所以,一切都在本地工作正常,但在heroku它改为:en

在两种环境中启动控制台:

Heroku的:

heroku console --app myapp
Run Code Online (Sandbox Code Playgroud)

本地:

rails c
Run Code Online (Sandbox Code Playgroud)

然后玩

Heroku: > I18n.l Time.now
=> "Tue, 01 Mar 2011 06:43:58 -0800"
Local:  > I18n.l Time.now
 => "tirsdag,  1. mars 2011, 15:43"

Heroku: > I18n.default_locale
 => :nb
Local:  > I18n.default_locale
 => :nb

#after a lot more trial and error, I find this:
Heroku: > I18n.locale
=> :en
Local:  > I18n.locale
=> :nb
Run Code Online (Sandbox Code Playgroud)

只是I18n.locale = :nb在控制台中修复问题ATM,当我在不同的浏览器中刷新时,它可以正常工作.但在重新部署时,它又回到了:en.

我是否也必须在initilizer中设置语言环境?我糊涂了.

仅供参考:我没有以编程方式将I18n.locale设置在任何地方.staging.rb很简单.

ruby-on-rails heroku internationalization

2
推荐指数
1
解决办法
2030
查看次数

rails 3.2 LESS CSS和heroku?

想要尝试新的东西,使用真棒的twitter bootstrap和他们的Less CSS.我终于启动并运行了我的应用程序,但它在heroku的只读系统中崩溃了.我正试图找出我的选择,使用LESS,rails 3.2和heroku.这是我认为可以做的:

(1)一种选择是:预编译.

 bundle exec rake assets:precompile
 git commit public/assets -m "tedious precompilation task"
 git push heroku
Run Code Online (Sandbox Code Playgroud)

我肯定会忘记预编译一次,只需将更改推送到heroku并让我的用户感到烦恼.不是我想要的.

(2)一个好的选择是less.js.它编译客户端.这是最常用的吗?

(3)更好的选择,IMO.预编译缓存.预编译例程和额外的客户端都不起作用.我问的是,是否有类似SASS的麻烦,少花钱?

UPDATE 26th jan-12:人们不使用麻烦的轨道3.1+,他们使用资产管道的sass-rails(默认rails 3.2).麻烦是sooo rails 3.0;)rake预编译步骤在heroku失败了./ UPDATE

我发现编译为静态机架缓存的想法绝对非常出色.我更喜欢它让每个客户端都需要在部署时一次性完成编译我的较少css.

更新25日1月:在heroku上更新自己.雪松堆栈支持资产管道,因此不再需要麻烦的宝石.正确?/ UPDATE

该怎么办?

ruby-on-rails heroku less asset-pipeline

2
推荐指数
1
解决办法
4655
查看次数

Rails推迟了工作不工作

我推迟的工作不起作用.我正在尝试使用应该每15分钟运行一次的延迟作业为rake文件创建后台任务.我已经在rake文件中复制了我的rake任务,并将它们作为方法设置在我的控制器中.我需要延迟工作,因为heroku每1小时只生一个cron.

这是我的应用程序控制器:

class ApplicationController < ActionController::Base

require 'delayed_job'
require 'Mechanize'
require 'pp'


protect_from_forgery

def iqmedier
          agent = WWW::Mechanize.new
          agent.get("http://www.iqmedier.dk")
          form = agent.page.forms.first
          form.submit

          agent.page.link_with(:href => "/Publisher/Stats").click

          form = agent.page.forms.first
          form.submit

          @stats = agent.page.search('//tr')[-2]

          @existing = Reklamer.find(:first, :conditions => {:dato => @stats[0]})
          if @existing.nil?
              Reklamer.create!(:virksomhed => 'Iqmedier', :dato => @stats[0], :unik_klik => @stats[1], :klik => @stats[2], :unik_vis => @stats[3], :vis => @stats[4], :leads => @stats[5], :ordre => @stats[6], :cpc => @stats[7], :earn => @stats[8])
          elsif @existing.dato != Date.today
          Reklamer.create!(:virksomhed => 'Iqmedier', …
Run Code Online (Sandbox Code Playgroud)

ruby delayed-job

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