我们有基于黄瓜的UI自动化测试框架.最近我们已经从Ruby 1.9.x迁移到2.2.0,之后我们在通过测试框架登录我们的应用程序时遇到了问题.它说SSL连接重置问题.
错误跟踪:
07:01:26 An existing connection was forcibly closed by the remote host. - SSL_connect (Errno::ECONNRESET)
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/ssl_socket.rb:46:in `connect'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/ssl_socket.rb:46:in `ssl_connect'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/ssl_socket.rb:24:in `create_socket'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/session.rb:739:in `block in connect'
07:01:26 D:/Ruby223/lib/ruby/2.2.0/timeout.rb:88:in `block in timeout'
07:01:26 D:/Ruby223/lib/ruby/2.2.0/timeout.rb:98:in `call'
07:01:26 D:/Ruby223/lib/ruby/2.2.0/timeout.rb:98:in `timeout'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/session.rb:735:in `connect'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/session.rb:497:in `query'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient/session.rb:170:in `query'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient.rb:1238:in `do_get_block'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient.rb:1021:in `block in do_request'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient.rb:1129:in `protect_keep_alive_disconnected'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient.rb:1016:in `do_request'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient.rb:858:in `request'
07:01:26 D:/Ruby223/lib/ruby/gems/2.2.0/gems/httpclient-2.7.1/lib/httpclient.rb:761:in `post'
<-- our Code for login kick in to call …
Run Code Online (Sandbox Code Playgroud) 是否可以按如下方式定义类型:
defmodule Role do
use Exnumerator, values: ["admin", "regular", "restricted"]
@type t :: "admin" | "regular" | "restricted"
@spec default() :: t
def default() do
"regular"
end
end
Run Code Online (Sandbox Code Playgroud)
为代码做一个更好的分析,如:
@type valid_attributes :: %{optional(:email) => String.t,
optional(:password) => String.t,
optional(:role) => Role.t}
@spec changeset(User.t, valid_attributes) :: Ecto.Changeset.t
def changeset(%User{} = user, attrs = %{}) do
# ...
end
# ...
User.changeset(%User{}, %{role: "superadmin"}) |> Repo.insert()
Run Code Online (Sandbox Code Playgroud)
我知道我可以将此类型定义为@type t :: String.t
,但是,Dialyzer不会抱怨使用不同的值(可能从应用程序的角度来看).
我没有在Typespecs的文档中看到关于这个用例的任何提示,但也许我遗漏了一些东西.
我正在将 Carrierwave 迁移到 Rails 5.2.3 应用程序中的 Active Storage,并使用 S3 作为文件系统。问题是我的一些文件非常大(视频文件),我不能简单地下载它们来计算校验和。
对于小文件,我可能可以使用ETag
(使用 API 获取)。但是,它不适用于较大的文件。根据文档:
如果对象是通过分段上传或部分复制操作创建的,则无论采用何种加密方法,ETag 都不是 MD5 摘要。
有没有足够快的方法来获取文件的校验和?或者我是否需要猴子修补 的ActiveStorage::Blob
方法compute_checksum_in_chunks
和所有相关代码(如 JavaScript lib 等)?
我想避免覆盖 Active Storage 代码,因为 (1) 将来很难维护,(2) S3 根据文件上传的方式以不同的方式计算 ETag。唯一可行的解决方案是NOT NULL
从 blob 表中删除约束并覆盖 Active Storage,以便在校验和丢失时不会引发完整性异常。但是,我不确定这是否是一个好主意(并且可维护性在这种情况下仍然相关)。
ruby ruby-on-rails amazon-s3 carrierwave rails-activestorage
我正在处理的项目中,我们正在为Active Record转储器使用:sql
架构格式(以支持触发器等更复杂的逻辑)。
我们有很多视图,并且我可以在database/structure.sql
文件中看到其中一些具有带有的“预定义”架构,NULL
例如:
CREATE VIEW public.my_view AS
SELECT
NULL::integer AS record_id,
NULL::integer AS another_record_id,
NULL::double precision AS some_field;
Run Code Online (Sandbox Code Playgroud)
然后,在数千行之后,使用以下命令添加定义:
CREATE OR REPLACE VIEW public.my_view AS
-- actual query
Run Code Online (Sandbox Code Playgroud)
我在SQL查询中看不到架构“预定义”和定义之间对视图的任何引用。另外,还有其他立即创建的视图(没有该模式“ predefinition”)。
我在查看Active Record文档,但找不到任何提示。Rails pg_dump
在后台使用,但我在pg_dump
文档中也看不到任何相关内容。
为什么有些视图需要预先预定义架构,而另一些视图则不需要,即使在database/structure.sql
文件中的预定义和实际定义之间没有引用它们时也是如此?使用其他结构(例如实体化视图等)时,是否可以防止某些竞赛条件?
如何使用水豚模拟移动设备视图?
我目前的代码是
require 'spec_helper'
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
feature 'User', integration: true, :js => true do
scenario 'favorite products' do
4.times { create(:advices) }
category = create(:category)
sub_category = create(:subcategory, category_id: category.id)
brand = create(:brand, title: 'Fender')
create(:banner, position: 1)
visit '/'
binding.pry
end
end
Run Code Online (Sandbox Code Playgroud)
我应该怎么做来模拟移动视图?
我正在遵循这个基本教程,似乎这些测试应该在最多2秒内运行,但是我在5次测试中得到41秒.
我用ChefSpec运行--profile
,这就是结果
Top 8 slowest examples (41.17 seconds, 99.8% of total time):
webserver_test::default When run on CentOS 7.2.1511 installs httpd
5.21 seconds ./spec/unit/recipes/default_spec.rb:20
webserver_test::default When run on Ubuntu 14.04 converges successfully
5.17 seconds ./spec/unit/recipes/default_spec.rb:39
webserver_test::default When run on CentOS 7.2.1511 enables the httpd service
5.16 seconds ./spec/unit/recipes/default_spec.rb:24
webserver_test::default When run on Ubuntu 14.04 starts the apache2 service
5.15 seconds ./spec/unit/recipes/default_spec.rb:51
webserver_test::default When run on CentOS 7.2.1511 converges successfully
5.15 seconds ./spec/unit/recipes/default_spec.rb:16
webserver_test::default When run …
Run Code Online (Sandbox Code Playgroud) ruby ×3
activerecord ×1
amazon-s3 ×1
capybara ×1
carrierwave ×1
chef-infra ×1
chefspec ×1
cucumber ×1
dialyzer ×1
elixir ×1
erlang ×1
pg-dump ×1
postgresql ×1
rubygems ×1
selenium ×1
ssl ×1
typechecking ×1