小编Cam*_*ate的帖子

Devise打破了我的所有测试 - ActiveRecord :: RecordNotUnique PG :: Error

我很难过.我有一个rails应用程序(3.1.3),我一直在建立我最近添加设计(2.0),以创建用户模型和随之而来的相应身份验证.安装设计并运行rake测试后,我的所有测试都抛出了同样的错误.在单元和功能测试中,我得到了一个如下错误:

ERROR should get index (0.05s) 
      ActiveRecord::RecordNotUnique: PG::Error: ERROR:  duplicate key value violates unique constraint "index_users_on_email"
DETAIL:  Key (email)=() already exists.
: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2012-03-30 04:13:13', '2012-03-30 04:13:13', 298486374)
      /Users/myname/.rvm/gems/ruby-1.9.2-p290@global/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这会影响我的所有测试,或者是什么导致它.以前有人见过这样的东西吗?我在这做错了什么?

任何建议/帮助将不胜感激!

谢谢!

testing ruby-on-rails devise

22
推荐指数
2
解决办法
4538
查看次数

如何使用omniauth google oauth2获取rails app的'refresh_token'?

几个月前,我创建了一个使用oauth2进行身份验证的rails应用程序 - 特别是omniauth-google-oauth2 gem.我已经完成了创建身份验证并存储刷新令牌的所有步骤,但最近oauth2停止发送'refresh_token'作为响应的一部分.最初我收到的回复包含:

credentials: {
  refresh_token: XXX,
  token: YYY,
  expires_at: 1374840767,
  expires: true
},
Run Code Online (Sandbox Code Playgroud)

现在我只收回一小时内到期的令牌:

credentials: {
  token: YYY,
  expires_at: 1374840767,
  expires: true
},
Run Code Online (Sandbox Code Playgroud)

我真的不知道我在应用程序方面做了什么来改变这一点,所以我不确定谷歌是否有改变,或者我做了什么.对于上下文,我的代码如下:

初始化/ omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, 'KEY', 'SECRET', {:scope => "userinfo.email,userinfo.profile,analytics.readonly,adsense.readonly"}
end
Run Code Online (Sandbox Code Playgroud)

authentications_controller.rb是我收到响应的地方:

def create
  auth = request.env["omniauth.auth"] 
  params = request.env["omniauth.params"]
  project = Project.find(params['project_id'])

  Authentication.create(:project_id => project.id, :provider => auth['provider'], :uid => auth['uid'], :access_token => auth['credentials']['refresh_token'])
  flash[:notice] = "Authentication successful."
  redirect_to owner_view_project_path(project)
end
Run Code Online (Sandbox Code Playgroud)

我的initializers/omniauth.rb文件中是否可能缺少某些内容?我已经尝试将以下内容添加到选项哈希中,但这似乎没有带回刷新令牌:

:approval_prompt => "force", :access_type => "offline"
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!提前致谢!

ruby-on-rails oauth-2.0 omniauth

8
推荐指数
2
解决办法
2235
查看次数

使用Stripe webhooks和Rails

我已经根据Ryan Bates的railscast(http://railscasts.com/episodes/288-billing-with-stripe)成功构建了一个rails应用程序 - 然而,在railscast中他没有涵盖webhooks.我想知道在公共领域是否有任何好的例子来实现和使用webhook来管理已经创建的订阅计费.

任何想法/方向都会非常有用吗?

谢谢!

payment ruby-on-rails webhooks stripe-payments

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

如何导航到略高于锚标记?

我知道如何导航到页面上的给定锚标记 - 我要做的是链接到目标锚点上方30-40像素的页面的一部分.这样做的原因是我有一个引导程序导航,如果我喜欢直接使用锚点的页面部分,最终会覆盖部分相关内容.

目前我有这个链接:

%a{:href => root_path + "#how_it_works"} How It Works
Run Code Online (Sandbox Code Playgroud)

并在页面上链接到:

.span12#how_it_works
Run Code Online (Sandbox Code Playgroud)

有关如何获取链接导航到略高于.span12#how_it_works的页面部分的任何想法?

navigation anchor jquery ruby-on-rails twitter-bootstrap

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

如何从主页加载后加载特定数据的页面中抓取数据?

我一直在使用Ruby和Nokogiri从类似于来自hollister网站的URL中提取数据:http://www.hollisterco.com/webapp/wcs/stores/servlet/TrackDetail? storeId = 10251&catalogiId = 10201&langId = -1&urL = TrackDetailView&ORDERNUMBER = 1316358

我的脚本现在看起来像这样:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

page = Nokogiri::HTML(open("http://www.hollisterco.com/webapp/wcs/stores/servlet/TrackDetail?storeId=10251&catalogId=10201&langId=-1&URL=TrackDetailView&orderNumber=1316358")) 

puts page.css("h3[data-property=GLB_ORDERNUMBERSYMBOL]")[0].text
Run Code Online (Sandbox Code Playgroud)

我的问题是Hollister页面有一些异步的数据加载,这样当我的脚本检查页面区域的页面元素的订单特定数据时,它还不存在.IE浏览器中,<h3>data-property=GBL_ORDERNUMBERSYMBOL不存在,但在浏览器中,如果你让它加载另一个十秒钟,DOM和HTML的改变,以反映具体订单的详情.

捕获事后加载的数据的最佳方法是什么?我已经尝试过使用watir-webdriver,但不知道我需要做些什么才能让它工作.

ruby screen-scraping watir nokogiri watir-webdriver

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