小编vov*_*van的帖子

Hash#keys方法的输出错误

在某些情况下Hash#keys,2.4版之前的Ruby无法正常工作

演示代码:

h = { a: 1, b: 2, c: 3 }
h.each do |k, v|
    h.delete(:a)
    p h
    p h.keys
    break
end
Run Code Online (Sandbox Code Playgroud)

Ruby 2.3.8的输出:

{:b=>2, :c=>3}
[:b]
Run Code Online (Sandbox Code Playgroud)

Ruby 2.5.1输出:

{:b=>2, :c=>3}
[:b, :c]
Run Code Online (Sandbox Code Playgroud)

我同意在迭代时修改哈希值不是很好。但是我没有看到哈希值修改和工作键方法之间的关系。

为什么会这样呢?

ruby

10
推荐指数
1
解决办法
98
查看次数

如何在Capybara/Poltergeist中测试JavaScript错误

我需要检查页面是否有JavaScript错误.

capybara-webkit的解决方案 http://blog.55minutes.com/2013/10/test-javascript-with-capybara-webkit/

require 'spec_helper'

feature 'Home' do
  it 'should not have JavaScript errors', :js => true do
    visit(root_path)
    expect(page).not_to have_errors
  end
end

如何使一个看起来像Poltergeist一样?

spec_helper.rb

...
require 'capybara/rails'
require 'capybara/selenium/driver'
...


selenium_hub_host = "selenium"
selenium_hub_port = "100"
selenium_url = "http://#{selenium_hub_host}:#{selenium_hub_port}/wd/hub"

...
Capybara.register_driver :selenium_remote do |app|
  options = {}
  options[:browser] = :remote
  capabilities = Selenium::WebDriver::Remote::Capabilities.firefox
  capabilities[:platform] = :any
  capabilities[:takes_screenshot] = true
  options[:url] = selenium_url
  options[:desired_capabilities] = capabilities
  Capybara::Selenium::Driver.new(app, options)
end

Capybara.javascript_driver = :selenium_remote
Capybara.default_max_wait_time = 30

Capybara.server do |app, port|
  require …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails capybara poltergeist

7
推荐指数
1
解决办法
2772
查看次数

Slack bot的零停机时间部署

我们使用BotKit开发bot,现在我们尝试以最小的部署停机时间来解决问题.

此服务器上运行服务器和docker容器.内部容器运行bot-app实例与RTM-server(Slack)连接.当我开始部署bot-app的新版本(v2)时,我希望零停机时间,用户不应该看到"僵尸程序脱机".

时间线

部署脚本使用新版本的bot-app运行第二个docker容器.bot-app也连接到RTM服务器.通过这种方式,当两个应用程序都运行时,几秒钟连接到RTM服务器并响应用户命令(并且用户将看到他的命令的两个答案).

如果一方面我们希望获得零停机时间,另一方面,我们希望阻止用户同时与这两个实例进行交互,那么我可以得到什么样的最佳决策?

决策1:当两个实例都响应用户命令时,允许发生冲突的可能性很小.

决策2:放弃零停机部署.在这种情况下,部署脚本首先停止第一个docker-container,然后启动另一个docker-container.该应用程序不会响应用户命令,在停止当前版本的应用程序和完全启动应用程序的新版本之间发送.

决策3:通过并行运行当前和新版本的应用程序或互斥体进行交互.一般原理图:1)当前版本的应用程序正在运行2)部署脚本启动应用程序的新版本3)我新的应用程序版本几乎运行并准备连接到RTM服务器,它发送到当前版本的app命令关闭RTM-连接.4)当前版本的应用程序关闭RTM连接5)新版本的应用程序打开RTM连接

我认为还有其他好的解决方案.

您如何在应用程序中解决此问题?

deployment parallel-processing mutex devops slack

7
推荐指数
1
解决办法
293
查看次数

什么是KCachegrind的默认扩展

我在Ubuntu 14.10上安装了KCachegrind

当我单击“打开”按钮时,我看到带有文件“ Callgrind Profile Data”的默认过滤器的“打开”对话框,但看不到我的文件。我必须在过滤器中选择“所有文件”,然后才能看到我的文件。

打开此对话框时,哪个扩展名必须具有一个我见过他的文件?

kcachegrind

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

在两个类似的React Native应用之间共享代码

我需要有关我的应用程序的体系结构和代码组织的建议。我开发了React Native应用程序。我们的业务需要两个应用程序而不是一个。当前应用-适用于当前目标受众。第二个应用程序应针对其他目标受众。每个应用程序都应具有网络版本。应用程序中的部分代码将是相同的(业务逻辑,功能,通用屏幕)。另一部分将有所不同。该应用程序将具有不同的设计主题,文本,图标,身份验证方法,付款方法以及更多功能。

我这样看:

??? mobile
?   ??? app1
?   ?   ??? .env
?   ?   ??? index.android.js (symlink to ../../lib/mobile/app/index.android.js)
?   ?   ??? index.ios.js (symlink to ../../lib/mobile/app/index.ios.js)
?   ?   ??? ios (symlink to ../../lib/mobile/app/ios)
?   ?   ??? android  (symlink to ../../lib/mobile/app/android)
?   ?   ??? src
?   ?   ??? node_modules
?   ?   ??? package.json
?   ??? app2
?       ??? .env
?       ??? index.android.js (symlink to ../../lib/mobile/app/index.android.js)
?       ??? index.ios.js (symlink to ../../lib/mobile/app/index.ios.js)
?       ??? ios (symlink to ../../lib/mobile/app/ios)
?       ??? android  (symlink …
Run Code Online (Sandbox Code Playgroud)

architecture react-native

5
推荐指数
0
解决办法
248
查看次数

比较大于`>`和小于`<`运算符的类是什么意思?

我还没有找到运营商的任何说明>,<,>=,<=在文档中ObjectClass.

String > Object      # => false
BasicObject > Object # => true
String > Integer     # => nil
Run Code Online (Sandbox Code Playgroud)

ruby

4
推荐指数
2
解决办法
87
查看次数