小编dj.*_*dj.的帖子

如何在Rails上编写Stripe checkout的集成测试?

我试图为我的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

18
推荐指数
2
解决办法
5747
查看次数

如何防止在无序列表之前发生换行?

我的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)

html css html-lists

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

如何在Mac OS上使用ruby设置文件创建时间?

我正在尝试使用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)

ruby filesystems macos file ctime

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

Rails模型有两个多态的has_many到:对象标记的关联

我的架构中有ArticlesJournals可与被标记Tags.这需要has_many through:与我的Tagging连接表的多态关系关联.

好的,这是一个简单且记录良好的部分.

我的问题是Articles可以同时拥有主标签和子标签.主要标签是我最感兴趣的,但我的模型也需要跟踪这些子标签.子标签只是描述Article不太重要的标签,但来自同一个全局池Tags.(事实上​​,一个Article人的主要标签可能是另一个人的子标签).

实现这一点需要Article模型与模型有两个关联,Tagging并且两个has_many through:关联Tags(即#tags&#sub-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

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

On New Relic是什么促成了Heroku Rails应用程序的"Ruby花费的时间"?

我正在努力提高我在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应用程序带回家消息:

  • 在多个领域(即缓存,CDN,数据库,Ruby代码)中进行简单的性能调整,在整个堆栈中具有协同效应.
  • 相反,即使您调整其他区域(即Heroku上的慢启动Basic或Dev数据库与'昂贵的'生产数据库 - 慢速基本数据库会破坏我的应用程序性能),任何单个性能消耗都将成为您无法克服的瓶颈).
  • NewRelic对于找出可以获得最大收益的地方至关重要.

performance ruby-on-rails heroku ruby-on-rails-3 newrelic

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

如何仅将数字的字符串哈希值转换为整数

我有从几个不同的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"仍然是一个字符串,而IdCount在上面的例子中变得整数1123.

有一种简单的方法来转换只有字符串值,其数字为整数?

ruby string integer type-conversion

3
推荐指数
2
解决办法
5607
查看次数

查找字段值全部为LOWERCASE的记录

在Rails 3.2应用程序中,我有一个Tag模型,并希望查找name:string字段中的值全部为小写的所有记录.

因此,activerecord查询(在Postgres上)将返回Tag(id: 1, name: 'test')但不返回Tag(id:2, name: 'Test').

我确信有一种简单的方法可以做到这一点但我无法生成有效的查询!

sql postgresql activerecord ruby-on-rails ruby-on-rails-3

3
推荐指数
2
解决办法
966
查看次数

在范围中使用OR与查询

在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 ruby-on-rails ruby-on-rails-3

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