在某些情况下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)
我同意在迭代时修改哈希值不是很好。但是我没有看到哈希值修改和工作键方法之间的关系。
为什么会这样呢?
我需要检查页面是否有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) 我们使用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连接
我认为还有其他好的解决方案.
您如何在应用程序中解决此问题?
我在Ubuntu 14.10上安装了KCachegrind
当我单击“打开”按钮时,我看到带有文件“ Callgrind Profile Data”的默认过滤器的“打开”对话框,但看不到我的文件。我必须在过滤器中选择“所有文件”,然后才能看到我的文件。
打开此对话框时,哪个扩展名必须具有一个我见过他的文件?
我需要有关我的应用程序的体系结构和代码组织的建议。我开发了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) 我还没有找到运营商的任何说明>,<,>=,<=在文档中Object和Class.
String > Object # => false
BasicObject > Object # => true
String > Integer # => nil
Run Code Online (Sandbox Code Playgroud) ruby ×2
architecture ×1
capybara ×1
deployment ×1
devops ×1
kcachegrind ×1
mutex ×1
poltergeist ×1
react-native ×1
rspec ×1
slack ×1