昨天在家部署了gitlab,版本居然是15.10,公司版本却是14.6,升级一波。
官方文档:
http://docs.gitlab.com/ee/update/#upgrading-without-downtime
官方文档总结:
文档介绍需要按升级路径拉取镜像。
经我概览,只需备份etc、log、opt三个文件夹,而且都早已挂载在宿主机,无所谓,随便升。
另外,有正在运行的CI/CD作业需要处理一下,因为我的gitlab还没有这些,不能演示,请参考官网。
开始:
#1.查看gitlab当前版本
docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
我这显示14.6.1
#2.上DockerHub查找最新版本
http://hub.docker.com/r/gitlab/gitlab-ce/tags,不要直接拉取latest,因为不会跨版本升级
看了一下,最新版是15.10.3-ce.0,因为我的版本是14.6,需要先升级至14.10.X最新版,再升级至15.0.X最新版,才能再升级至当前最新的15.10.3-ce.0,
至于我是从哪看的,可以自行运行最新镜像,容器会不断重启,看一下log就知道了。
根据搜索记录显示,15.0.X最新版本为:15.0.5-ce.0,14.10.X是14.10.5-ce.0
这个升级路线可以直接docker运行最新镜像查logs,慢慢倒推,也可以自己百度清楚,提前把需要的镜像pull下来,一个2G多,也挺费时间的
#3.查看gitlab容器ID
docker ps
#4.暂停并删除gitlab容器
删除前需确认一下配置文件和数据是否已挂载,一般都会配置挂载路径
docker stop <CONTAINERID>
docker rm <CONTAINERID>
头铁不弄也行,除非你想给容器起不同的名字,用不同的端口号,不然肯定运行不起来
#5.运行gitlab网站14.10.X最新的gitlab镜像
sudo docker run --detach \
--name gitlab \
--restart always \
-p 9080:80 \
-p 9022:22 \
-v /home/gitlab/etc:/etc/gitlab \
-v /home/gitlab/log:/var/log/gitlab \
-v /home/gitlab/opt:/var/opt/gitlab \
gitlab/gitlab-ce:14.10.5-ce.0
注意:没有提前pull也没关系,他会自行拉取gitlab官网的镜像。
注意:既然是升级那挂载目录千万别错了,要跟之前的目录一样。
解释:
sudo:以管理员权限运行,如果是root账号无所谓
--detach:可简写成-d,后台运行
--name:容器名
-v:挂载,左边是宿主机目录,右边是容器内目录
gitlab/gitlab-ce:拉取gitlab的社区版
#6.等待gitlab启动完成
这个时候浏览器访问显示无法访问别慌,输入docker ps,会看到gitlab的状态是starting,等他完成
#7.重复开局步骤查看当前版本
先浏览器访问一下有没有启动成功,我这是成功了。然后查询版本为14.10.5
#8.暂停、删除容器,运行下一版本15.0.X
查看是否启动成功,然后再把容器暂停,删除,运行新版本,命令在第5步,只需把结尾的版本号换一下就行
#9.暂停、删除容器,运行当前最新版本15.10.3-ce.0
再暂停,删除,运行,然后访问页面,root登录,仪表盘查看版本,可以看到版本变成最新的了。至于为啥步骤这么奇怪,必须每个版本都得运行一下,我也不知道,但确实跨版本升级会报错
#10.删除旧版本镜像,释放空间
docker rmi ImageID
结束
随着高通量测序技术种类的越来越多,我们经常会拿到相关样本的不同组学的数据。那拿TCGA的数据库而言,对于同一个患者,就检测了RNA-seq,miRNA-seq,甲基化芯片等等多组学的数据。对于这样有多组学数据的情况,除了基本的单一组学的分析,也可以尝试着融合多个组学一起分析。所以,今天就介绍一个多组学分析的工具。OmicsAnalyst(https://www.omicsanalyst.ca/OmicsAnalyst/home.xhtml)OmicsAnalyst使用数据上传在进入OmicsAnalyst的网址之后,我们点击其中的GETSTARTED就可以使用进行分析了。由于是从开开始分析的工具,所以第一步也就是来上传原始数据。在OmicsAnalyst当中主要支持五种高通量测序的数据分析。在数据上传的同时,OmicsAnalyst还对上传的数据进行了一些简单的处理比如:缺失值处理,低表达数据过滤,组间分析由于也是在线工具类的,不会特别的智能,所以也一定要满足这个工具的要求。具体的上传的数据格式可见:https://www.omicsanalyst.ca/OmicsAnalyst/do
//MySQL8.0之不可见列//MySQL8.0.23之后引入了不可见列,今天我们来说说这个特性。01创建不可见列MySQL5.7创建不可见列:CREATETABLE`t2`( `id`intNOTNULLAUTO_INCREMENT, `name`varchar(20)DEFAULTNULL, `age`intDEFAULTNULLINVISIBLE, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci 复制可以看到,我们的SQL里面创建了一个表t2的字段有id、name和age,其中,age字段设置了不可见属性。当然,我们可以使用altertable的语法来创建一个不可见列,给t2表中,添加一个score的不可见字段mysql>altertablet2addscoreintinvisible; QueryOK,0rowsaffected(0.05sec) Records:0Duplicates:0Warnings:0 复制createtablelike的语法能不能完美
之前有个小伙伴泡沫(忍不住想起了邓紫棋那首同名歌曲)给我发了一段很长很长的私信,我一直没想好怎么回答,就在收藏夹里搁浅了很长一段时间,今天拉出来认认真真回答一下。虽然可能已经晚了,但我心里那份亏欠可以放在岸上了。我把泡沫的问题拆解了一下,希望我的回答能够帮助到有同样烦恼的小伙伴。二哥,您好!有时间会看您的文章,很感谢您能发自肺腑的写一些东西让大众受益,替所有受到您帮助的人感谢您。问题的开场白真的是太妙了,夸得我一直笑,就差把口水流下来。遇到这样用心的小伙伴,真的是我的荣幸。但是呢,我要提一点小小的要求,有没有时间都要看看二哥的文章嘛,保证受益。毕竟真的都是肺腑之言。我是一名研三的学生,最近在参加秋招,去年这个时候看到师兄师姐找工作不是很顺利,所以当时就开始准备为找工作打基础,那时刚开始学JAVA,会听一些前辈的意见把JAVA基础过了一遍。秋招是校招的一种,还有一种就是春招。春招,也就是春季校园招聘(3月-4月末),与秋季校园招聘(9月-11月,也可能提前到7月份)相比,周期短,岗位少,宣传力度小(线上、线下宣讲会)。秋招面向的群体一般是应届生,面临毕业,课业较少,时间比较富裕;春招面向
说明在日常开发中,经常会需要写多条件的数据库查询语句。在使用框架的情况下,单纯使用原生sql查询会导致结果与model无法对应,也就没有办法使用框架的一些便利的方法对结果集进行处理。尤其是laravel提供了非常多的对查询结果集进行处理的工具。所以最好是使用laravel提供的ORM进行多条件的数据库查询。问题比如需要执行这样一条sql语句select * from homework where (idbetween1and10oridbetween50and70) andcomplete=1 and(titlelike'a%'ortitlelike'b%');复制解决方式$homeworks=Homework::where(function($query){ $query-whereBetween('id',[1,10]) -orWhereBetween('id',[50,70]); })-where('complete',1) -where(function($query){ $qu
fromseleniumimportwebdriver options=webdriver.ChromeOptions() #指定驱动 driver_path="D:\pyauto_driver\chromedriver.exe" driver=webdriver.Chrome(driver_path,options=options) #不指定驱动 #driver=webdriver.Chrome(options=options) print(driver.title)复制正常情况是在根目录下放置驱动,而且改名就识别不了了,如果偶尔换个别的版本浏览器,需要重新放置个合适的浏览器驱动把之前的替换掉,很是麻烦。 通过指定驱动后面就可以实现我把很多浏览器版本的驱动都放指定位置,后面可以写个遍历驱动的方法,如果这个驱动不适用就换另一个驱动,这样就可以在频繁更换浏览器版本的情况下正常运行我们的自动化了。 下面我把驱动放置在了其它的位置。 指定驱动后也照样运行成功了。
本文首发于vivo互联网技术微信公众号 链接:https://mp.weixin.qq.com/s/duO1pAfaKUI2_x_GVvZHMg 作者:YunjieMa一、ReactiveX与RxJavaReactiveX的全称为ReactiveExtension,一般缩写为Rx,即我们平常所说的反应式编程。其设计原理主要使用了观察者模式,区分数据的生产者和消费者,通过事件流的方式进行数据的异步处理。RxJava是ReactiveXJava语言的实现,其编程体验与Java8中的函数式编程和流(Stream)有很大的相似之处,在掌握了Java8的相关知识后,你可以很轻松的就上手使用RxJava。本篇文章主要聚焦对RxJava中几种主要的设计模式的理解,通过梳理Observable的相关类图以及讲解这些类之间的关系,让大家能够更清晰的理解RxJava中事件驱动的工作原理。二、RxJava中的概念首先我们写一个简单的RxJava的程序,把数组中的元素作为事件发送,最终由消费者打印在控制台:我们以这段简单的代码为基础,讲解下贯穿整个ReactiveX设计的四个概念:观察者,被观察者,事件,订阅
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/54773552 这篇文章主要介绍了C++中重载、重写(覆盖)的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下。 本文实例讲述了C++中重载、重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念。具体分析如下:1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例代码如下:classA{ public: voidtest(inti); voidtest(doublei); voidtest(inti,doublej); voidtest(doublei,intj); inttest(inti);//错误,非重载 };复制前四个互为重载函数,最后一个和第一个不是重载函数。2.重写:重写翻译自override,也翻译成覆盖(更好一点),是指
网上看到关于数据降维的文章不少,介绍MDS的却极少,遂决定写一写。 考虑一个这样的问题。我们有n个样本,每个样本维度为m。我们的目标是用不同的新的k维向量(k<<m)替代原来的n个m维向量,使得在新的低维空间中,所有样本相互之间的距离等于(或最大程度接近)原空间中的距离(默认欧氏距离)。 举个栗子:原来有3个4维样本(1,0,0,3),(8,0,0,5),(2,0,0,4),显然我们可以用三个新的二维样本(1,3),(8,5),(2,4)来保持维度变小并相互之间距离不变。 那么问题来了,如果不是这么明显的数据该如何来处理?降维后的距离一定会相等吗? MDS算法给出了在给定k值条件下的最优解决方案。 首先我们计算所有原空间中样本相互之间的距离平方矩阵Dist[][],显然这是一非负对称实数矩阵。至此,其实我们要维护的就是Dist不变,与原样本已经无关了。 接下来我们要根据Dist推算出目标降维后内积矩阵B,B[i][j]就是降维后第i,j个向量的内积。关于推导过程可以看相关书籍,这里给出一个优美的结论。 B[i][j]=-0.5(Dist[i][j]-avg(Disti[
[机房测试]11.11 突然觉得Liu_runda也不是那么毒瘤了。。。或许是ssw02的错觉 没人可以索要神秘礼物了 欢迎转载ssw02的博客:https://www.cnblogs.com/ssw02/p/11836978.html bit ssw02傻逼了 读入 T组数据,每组3个限制 思路 50分做法:直接暴力即可 100分做法:考虑到inf的两种情况:ansxor,ansor均为0或者ansor,ansand均为0 然后就可以放心枚举每一位:11:01:10:00是否合法即可 #include<bits/stdc++.h> usingnamespacestd; #definelllonglong constllmod=1e15; inlinellread(){ lls=0,w=1;charg=getchar();while(g>'9'||g<'0'){if(g=='-')w=-1;g=getchar();} while(g>='0'&&g<='9')s=s*10+g-'0',g=getchar();returns*
1.PowerBI深度分析研究 挑战:如何让大数据生动呈现 问题:如何定义生动呈现? 关于PowerBI的10点发散思考: 1.从PowerBI可以看出什么趋势/价值? 2.从PowerBI的产品哲学中可以学到什么? 3.从PowerBI可以借鉴什么到我们的产品? 4.为什么PowerBI要这么设计? 5.同类还有那些产品?各自水平优劣? 6.PowerBI对数据的理解到了何种深度层次?是否还可以再度加强? 7.为什么可视化会有价值? 8.深度拓宽可视化领域; 9.我们的产品相对于PowerBI,处于什么水平?有何优劣? 10.仔细使用PowerBI,体会PowerBI的模型世界 2.windows异常和异常处理 参考文章:http://www.cppblog.com/API/archive/2014/11/26/208965.html 3.图表总结 http://www.cnblogs.com/powertoolsteam/p/chart_graph.html 4.C++性能优化 5.
CF1017GTheTree 给定一棵树,维护以下\(3\)个操作: 1x如果节点\(x\)为白色,则将其染黑。否则对这个节点的所有儿子递归进行相同操作 2x将以节点\(x\)为根的子树染白。 3x查询节点\(x\)的颜色 \(n,q\le10^5\)。 \(\bigstar\texttt{Hint-1}\):如果真的向题目所说的去给每个点染色,将非常难维护。如果发现题目中信息混乱不妨向统计学方向考虑,我们记下这个\(x\)向下多少深度被染色,在每个点上根据它与根的路径查询答案。 如果没有\(2\)操作,我们在每个点上记录在它身上加了几次,那么查询时询问根到它的路径是否存在一段后缀和等于这段后缀的长度。不妨用一个更优美的解决方法,将每个点初始值设为\(-1\),那么查询是否有一段后缀和\(\ge0\)。 \(\bigstar\texttt{Hint-2}\):那么\(2\)操作呢?首先将子树内的值都清空,权值赋为初值\(-1\);并且需要去掉上面的点对子树内的贡献,就在\(x\)处加上从上面下来的影响深度(到\(x\)的最大后缀和)即可。 也就是在\(x\)处减去\(query
什么是用户行为? 广义来讲,用户行为是指网站、APP、H5、小程序等线上平台,以及零售商铺、产品使用环境等所有场景下,用户与企业以及企业提供的产品的交互情况。 什么是用户行为分析? 通常所说的用户行为分析,通过对用户线上行为数据、用户属性数据的收集,存储,分析,以找到相关规律,然后通过A/B测试等方式,探究有效方案的方式。 用户与产品的交互过程中的AAARR原则 用户获取(Acquisition)、激活(Activation)、留存(Retention)、营收(Revenue)、推荐(Referral)。 获取环节,主要对渠道进行分析,判断渠道用户匹配度、单位获客成本、获客效率 激活环节,寻找到活跃用户,仔细查看其行为序列,有必要的时候对活跃用户进行访谈,定义产品、公司的往往是初期的活跃用户 留存关乎产品健康的增长,所以对用户留存的关注也非常关键 营收和推荐环节,为用户设计喜爱的病毒传播因素,往往能让企业成指数级发展 各种企业如何通过数据寻找解决方案 做工具类的,用户留存好解决,用户获取和激活用户分享是关键,所以Dropbox依靠分享赠送空间、Uber依靠推荐送优惠券、樊登读书会通
封了一下接口,快速使用。 其他的你都不用管了。 这里封装了需要读取外部conf文件配置输出项。否则可以用getInstance初始化日志类 #include"L4Cpp.h" voidCTestAgainDlg::OnBnClickedButton1() { L4Cpp::get()->warn("eeeeeeeee"); }复制 下面展示了封装以及引用结构 1#pragmaonce 2#include"L4Cpp/Category.hh" 3 4classL4Cpp 5{ 6private: 7L4Cpp(){}; 8staticlog4cpp::Category*root; 9 10public: 11//获得日志仓库 12staticlog4cpp::Category*get(); 13staticvoiddefaultFileInstance(); 14staticvoiddefaultSteamInstance(); 15};复制 L4Cpp.h 1//LogFacade.cpp如下: 2 3#include"StdAfx.h
目前没有读过ucgui的源代码,通过应用代码测试出在FRAMEWIN的控件焦点顺序是样的: 按资源列表里创建的控件,默认将焦点落在第一个可接收焦点的控件,目前知道不可接收 焦点的控件有TEXT,在FRAMEWIN上安排有以下的控件: static const GUI_WIDGET_CREATE_INFO _aDialogCreate[]={ {FRAMEWIN_CreateIndirect,NULL,0,0,0,128,64,0,0}, {TEXT_CreateIndirect,NULL,GUI_ID_TEXT0,25,0,50,13,0,0}, {MULTIEDIT_CreateIndirect,NULL,GUI_ID_MULTIEDIT0,65,0,42,13,0,0}, {CHECKBOX_CreateIndirect,NULL,GUI_ID_CHECK0,4
反转链表 Leetcode206:https://leetcode-cn.com/problems/reverse-linked-list/ NowcoderNC76:https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=188&&tqId=38547 1.问题描述 给定单链表的头节点head,反转链表。 2.输入输出 Input:head=[1,2,3,4,5] Output:[5,4,3,2,1] 3.算法分析 迭代法:1)实现存储前一个节点;2)通过当前指针遍历链表;3)存储后一个节点;4)将当前节点的next指针改为指向前一个节点。5)最后返回新的头引用——前一个节点。 时间复杂度:O(n) 空间复杂度:O(1) 递归法: 递归终止条件:链表只剩最后一个节点或者已经为空(最后一个节点就是反转后的头节点) 处理:让当前节点的下一格节点的next指针指向当前节点,且当前节点的next指向NULL,实现链表尾部开始的局部反转 时间复杂度:O(n)
今天在Linux上面装完MySQL,却发现在本地登录可以,但是远程登录却报错HostisnotallowedtoconnecttothisMySQLserver,找了半天试了网上的一些方法都没有解决,最终在一篇文章里找到了解决方法,特意记录一下。 先说说这个错误,其实就是我们的MySQL不允许远程登录,所以远程登录失败了,解决方法如下: 在装有MySQL的机器上登录MySQLmysql-uroot-p密码 执行usemysql; 执行updateusersethost='%'whereuser='root';这一句执行完可能会报错,不用管它。 执行FLUSHPRIVILEGES; 经过上面4步,就可以解决这个问题了。 注:第四步是刷新MySQL的权限相关表,一定不要忘了,我第一次的时候没有执行第四步,结果一直不成功,最后才找到这个原因。
破解 ` 路由器前提以刷好不死breed。 下载固件:PandoraBox-ralink-mt7620-phicomm-k2-2018-12-31-git-4b6a3d5ca-squashfs-sysupgrade.bin 百度云链接:链接:https://pan.baidu.com/s/1iDJFYbUPvvlAFhSWIrrQbA?pwd=j18k提取码:j18k 进入不死breed刷好后记得双清。 通过WDS让无线AP与我们的手机热点连接。给路由器通网 《软件包》页面安装以下包 luci-app-pppoeserver rp-pppoe-server 可能只用安装其中一个,为了省事我是全安的 https://github.com/evindu/NetKeeper-Interception下载nk4nk4.shnk4conf.sh三个文件。放到/root目录 执行 shnk4conf.sh 复制 ddns动态域名服务(不用luci自带的) 先看正常流程教程:https://blog.natcloud.net/cf-ddns.html 再看我写的适配k2的教程 修复curl 这个路
出处:http://www.cnblogs.com/void/archive/2012/02/01/2335224.html 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序 每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。 例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高 所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。 用法: 示例:将元素5,3,2,4,6依次push到优先队列中,print其输出。 1. 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。 priority_queue<int>pq;复制 通过<操作符可知在整数中元素大的优先级高。故示例1中输出结果为:65432 2.数据越小,优先级越高 priority_queue<int,vector<int>,greater<int>>pq;复制 其中第二个参数为容器类型。第二个参数为比较函数。故示
linux下mysql主从复制(第二篇读写分离)mycat中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-20151019230038-win.tar.gz 解压包 1.解压后的文件如下: 1.1 接下来进入到conf 目录下配置四个文件server.xml、schema.xml、rule.xml、log4j.xml 下面一一介绍 1.2 首先在我们主服务上面test 库下新建两张表如下: CREATETABLE`t_users`(复制 `user_id`varcha
这个作业属于哪个课程 <软件工程> 这个作业要求在哪里 <第一次个人编程作业> 这个作业的目标 <完成汉字编程> 作业正文 github地址 其他参考文献 无 编程题目 汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言? 小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。 编程要求 请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例): 变量定义:整数(变量名)等于(数字) 运算(加法):(变量名)增加(数字) 运算(减法):(变量名)减少(数字) 输出:看看(变量名)or看看“(字符串内容)” 附加要求: 选择:如果(判断语句)则(操作语句)否则(操作语句) 若否则后没有任何操作使用(无)来进行填充(参考样例2)。 样例1 输入: 整数气温等于十 气温减
计划的必要性 在我们日常的工作和生活中,经常需要做计划。古人云:凡事预则立,不预则废(《礼记.中庸》),也就是强调预先计划的重要性和必要性。 我们做项目,项目需要定项目计划;测试作为项目中的一部分,当然也需要制定测试计划。 测试计划就像是我们写论文一样,首先做好提纲,才能一步一步的完善填充,有了测试计划就掌握了整个项目的进度和方向,在工作中可以有个指导的作用,不至于偏离工作方向 测试计划规定预期的目标,以什么样的程度完成和在预期多久内完成,这样的规定能够使工作人员做好心理准备,合理的期限和目标能够使工作人员不松懈,有效率的完成一个项目 计划作为对未来工作的规划,肯定会受到突发的或者不稳定的因素影响而导致整个项目出现延期甚至无法进行的结果。因此计划中对于风险评估的必要性就在于罗列出影响整个项目进行的因素,并制定相应紧急方案,将损失降至最小化。 人员的安排呈现合理化。任何一个项目内的工作都有难易繁简的划分,因而才需要有专长的工程师进行对应的测试。难度较大的由资深测试人员安排,难度小的由新进实习生来进行,整个项目的进行就会显得合理化层次化条理化。同时将职责清晰地具体划分到个