我试图为我的Rails 3.2应用程序为Stripe的checkout.js [ https://checkout.stripe.com/checkout.js ] 编写集成测试.
手动测试(使用Stripe的测试键)时,条纹检查对我来说正常工作,但我无法让Capybara检测fill_in到Stripe checkout iframe模式中的电子邮件字段.
我正在使用无头javascript的poltergeist,虽然也用capybara-webkit和甚至selenium测试了同样的问题.
我要测试的是完整的订阅注册流程,以显示新用户在Stripe中输入付款详细信息后可以创建订阅者帐户 - 但我无法通过Stripe checkout弹出窗口.
这是我的before .. do:
describe "show Stripe checkout", :js => true do
before do
visit pricing_path
click_button 'plan-illuminated'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in "email", :with => "test-user@example.com"
fill_in "billing-name", :with => "Mr Name"
fill_in "billing-street", :with => "test Street"
fill_in "billing-zip", :with => 10000
fill_in "billing-city", :with => "Berlin"
click_button "Payment Info"
end
end
it …Run Code Online (Sandbox Code Playgroud) testing ruby-on-rails capybara ruby-on-rails-3 stripe-payments
我的Web应用程序框架<UL>在无效字段后面的无序列表中为每个字段呈现表单错误.我的问题是我无法设置样式,以便错误与表单字段列在同一行.换行之前会换行<UL>.
这是我要设置样式的html,显示服务器确定的无效字段:
<p>
<label for="id_email">Email</label>
<input id="id_email" type="text" name="email" />
<span class='field_required'> *</span>
<ul class="errorlist"><li>This field is required.</li></ul>
</p>
Run Code Online (Sandbox Code Playgroud)
如何防止span显示每个必填字段的星号的'field_required' 与表单未验证(在服务器上)时呈现的'错误列表'之间的换行符?
目前我正在造型:
span.field_required {color:red; display:inline;}
ul.errorlist {list-style-type: none; display:inline;}
ul.errorlist li {display: inline; color:red; }
Run Code Online (Sandbox Code Playgroud)
更新: 感谢大家的帮助!
虽然我的框架(django)默认提供错误,但我已经控制了HTML <UL>.根据伟大的建议,我尝试将列表包装在自己的样式<p>和<span>.<span>现在将列表包装在Firefox 3.0中,但在Safari 4.0中则不行.
当我检查Safari中的元素时,似乎该段落正在关闭之前<UL>,即使这不是 HTML源的外观.
我偶然发现了跨浏览器的错误吗?(不,见下文!)
最终解决方案:感谢您的帮助.以下是我最终解决问题的方法:
<p>用周围的标签字段的出错组合标签<div>与风格的clear:both;.感谢jennyfofenny指出W3C规范禁止在一个块内(在我的情况下是列表中)<p>- 因此赢得了答案.这就是Safari在列表之前自动关闭我的段落的原因,尽管Firefox让它滑动.然后,我将样式设置为:
ul.errorlist {list-style-type: none; display:inline; margin-left: 0; padding-left: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ruby脚本在Mac OS上设置文件的文件系统创建时间.
在Mac OS X上,'ctime'表示最后一次修改inode而不是文件创建时间,因此使用ruby的File.utime()来设置ctime将无济于事.
使用此提示[ http://inessential.com/2008/12/18/file_creation_date_in_ruby_on_macs ]我可以检索文件的创建时间:
Time.parse(`mdls -name kMDItemContentCreationDate -raw "#{filename}"`)
Run Code Online (Sandbox Code Playgroud)
...但是有关如何使用ruby设置它的任何想法?
- 更新 -
好吧,我想我能实际上做到这一点File.utime的红宝石.
尽管Mac OS在技术上并未使用ctime来跟踪文件创建时间,但当您使用utime更新ctime(以及必须同时设置的mtime)时,文件系统似乎神奇地也会更新创建时间kMDItemContentCreationDate.
因此,要将文件名设置为2010年10月1日的ctime和2010年10月2日的mtime:
File.utime(Time.strptime('011010', '%d%m%y'), Time.strptime('021010', '%d%m%y'), filename)
Run Code Online (Sandbox Code Playgroud) 我的架构中有Articles和Journals可与被标记Tags.这需要has_many through:与我的Tagging连接表的多态关系关联.
好的,这是一个简单且记录良好的部分.
我的问题是Articles可以同时拥有主标签和子标签.主要标签是我最感兴趣的,但我的模型也需要跟踪这些子标签.子标签只是描述Article不太重要的标签,但来自同一个全局池Tags.(事实上,一个Article人的主要标签可能是另一个人的子标签).
实现这一点需要Article模型与模型有两个关联,Tagging并且两个has_many through:关联Tags(即#tagssub-tags)
这是我到目前为止所做的,虽然有效但不保持主标签和子标签分开.
class Article < ActiveRecord::Base
has_many :taggings, as: :taggable
has_many :tags, through: :taggings
has_many :sub_taggings, as: :taggable, class_name: 'Tagging',
source_type: 'article_sub'
has_many :sub_tags, through: :sub_taggings, class_name: 'Tag', source: :tag
end
class Tagging < ActiveRecord::Base
# id :integer
# taggable_id :integer
# taggable_type :string(255)
# tag_id :integer
belongs_to :tag …Run Code Online (Sandbox Code Playgroud) tagging activerecord ruby-on-rails has-many-through polymorphic-associations
我正在努力提高我在Heroku上托管的pre-beta Rails 3.2应用程序的性能.
积极的缓存已经大大改善了一些东西,但是当我在New Relic上查看我的应用服务器响应时间时,我仍然注意到"在Ruby中花费的时间"的大量贡献(图中的浅蓝色).
Rails应用程序的哪些部分通常会导致这个"Ruby时间"?

我最初认为这是由于我的一个主控制器中的复杂条件,但已经简化了这一点.我现在使用俄罗斯玩偶片段缓存和内存缓存(哇!)非常积极地缓存我的观点.
服务静态资产是一个原因吗?(转移到S3/CloudFont是在待办事项列表...)
谢谢!
(我已经设置了delayed_job并将所有可能的内容移到后台.我也使用Unicorn作为我的Web服务器.)
更新的性能调整
积极缓存后,我开始寻找其他方法来提高应用程序性能.
首先,我添加了垃圾收集监控作为建议,发现GC对Ruby时间没有显着贡献.

接下来,我决定通过添加CDN(通过CDNsumo附加组件的Cloudfront)来获得我的资产服务.实际上,这实际上减少了我在NR监控上的Ruby时间.(CDN已经配置,然后在下图最右边的最后一次请求测试中加热.)我的大多数页面都有几百kb的css和javascript - 所以不小但不大.

最后,我从'基本'入门数据库升级到最小的生产数据库'Crane'.这对性能产生了巨大影响.经过PG的一点缓存,应用程序飞了.(下图中最后3个请求峰值).

为其他人尝试调整他们的Heroku应用程序带回家消息:
我有从几个不同的XML数据库转储导入的哈希行,看起来像这样(但使用不同的键):
{"Id"=>"1", "Name"=>"Cat", "Description"=>"Feline", "Count"=>"123"}
Run Code Online (Sandbox Code Playgroud)
我尝试使用#to_i但它将非数字字符串转换为0:
"Feline".to_i
# => 0
Run Code Online (Sandbox Code Playgroud)
但我想是一种方式"Feline"仍然是一个字符串,而Id与Count在上面的例子中变得整数1和123.
有一种简单的方法来转换只有字符串值,其数字为整数?
在Rails 3.2应用程序中,我有一个Tag模型,并希望查找name:string字段中的值全部为小写的所有记录.
因此,activerecord查询(在Postgres上)将返回Tag(id: 1, name: 'test')但不返回Tag(id:2, name: 'Test').
我确信有一种简单的方法可以做到这一点但我无法生成有效的查询!
在Rails3中我有:
Class Teacher
# active :boolean
has_and_belongs_to_many :subjects
Class Subject
# active :boolean
has_and_belongs_to_many :teachers
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个教师范围,它返回与之相关的所有Teachers内容active或与之相关联的Subject内容active.
这些范围单独工作,但如何将它们作为单个范围与OR组合?
scope :active_teachers, where(active: true)
scope :more_active_teachers, joins(:subjects).where(:subjects => {active: true})
Run Code Online (Sandbox Code Playgroud)
我试过这个没有成功:
scope :active_teachers, where(active: true).or(joins(:subjects)
.where(:subjects => {active: true}))
Run Code Online (Sandbox Code Playgroud)
更新:
我以为我有一个解决方案,但这不再是懒惰的负载,两次点击数据库 - 最重要的是 - 返回一个数组而不是一个AR对象!
scope :active_teachers, where(active: true) |
joins(:subjects).where(:subjects => {active: true})
Run Code Online (Sandbox Code Playgroud) activerecord ×3
ruby ×2
capybara ×1
css ×1
ctime ×1
file ×1
filesystems ×1
heroku ×1
html ×1
html-lists ×1
integer ×1
macos ×1
newrelic ×1
performance ×1
postgresql ×1
sql ×1
string ×1
tagging ×1
testing ×1