我应该善待我的 Web 服务消费者并为他们提供一些很好的示例,即使维护大型 xml 请求测试并不有趣。有没有更好的方法来成为一个好的 WS 提供者?
我没有html。该应用程序同时接受 XML 和 JSON,因此为了确保 API 示例(xml 和 json)的有效性,我想在集成套件中证明它们是正确的。
在你的回答中,我想看一些例子,而不是仅仅“尝试黄瓜/webrat/capybara”。没有html很难找到howto。感谢您的帮助!
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_at和created_at进行了测试,结果很好.
我仍然喜欢开发中的sqlite3,使用起来非常简单顺畅,复制数据库并发送给你的合作伙伴.感谢@newtover!
我会保持简短,我有一个与其他应用程序通信的rails应用程序,有些使用SOAP(当然是非rails应用程序......)和其他有REST的应用程序.我正在进行集成测试,以确保我的端点包装器类具有正确的映射和设置.但是,它们默认执行,rake test这使它变得缓慢而脆弱.我希望经常进行单元测试,并且只能按需"进行集成测试".你是怎样做的?
您对此类集成测试的偏好是什么?
更新问:如何在运行时排除test-dir rake test?
Rails 5.1 将主键的默认类型从integer 更改为 bigint。我们错过了这一点,现在我们得到了整数和 bigint 的混合结果。
我们应该在整数溢出再次袭击我们之前摆脱困境(其他项目,其他故事)。
我很乐意看到一个聪明的迁移脚本改变一切
列出整数类型主键的方法将是一个好的开始。
我有一个布尔标志: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,而且大多数操作显然都是未完成的.我不确定我是否理解何时使用稀疏,何时不使用.谢谢!
所以,一切都在本地工作正常,但在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很简单.
想要尝试新的东西,使用真棒的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
该怎么办?
我推迟的工作不起作用.我正在尝试使用应该每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)