GraphQL Rails 笔记 一

2018/12/3 posted in  Rails

使用 sameersbn/docker-gitlab 部署gitlab

https://github.com/sameersbn/docker-gitlab#installation

使用compose

wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml

aliyun smtp 服务配置

    - SMTP_ENABLED=true
    - SMTP_DOMAIN=smtpdm.aliyun.com
    - SMTP_HOST=smtpdm.aliyun.com
    - SMTP_PORT=80
    - SMTP_USER=master@xxx.com
    - SMTP_PASS=passworld
    - SMTP_STARTTLS=false
    - SMTP_AUTHENTICATION=login
2018/10/13

gitlab docker 部署记

https://stackoverflow.com/questions/44056807/gitlab-docker-smtp
https://developer.ibm.com/code/2017/07/13/step-step-guide-running-gitlab-ce-docker/
https://docs.gitlab.com/omnibus/docker/
https://hub.docker.com/r/gitlab/gitlab-ce/

#!/bin/bash

sudo docker run --detach \
      --hostname 192.168.88.244 \
      --publish 80:80 --publish 10022:22 \
      --env "GITLAB_SHELL_SSH_PORT=10022" \
      --name gitlab \
      --restart always \
      --volume /srv/gitlab/config:/etc/gitlab \
      --volume /srv/gitlab/logs:/var/log/gitlab \
      --volume /srv/gitlab/data:/var/opt/gitlab \
      gitlab/gitlab-ce:latest
   
2018/10/9 posted in  DevOps

树莓派 x86 系统安装记

2018/10/6

lede软路由安装

下载地址

http://firmware.koolshare.cn/LEDE_X64_fw867/

mac或者linux直接用dd写入磁盘就行

sudo dd if=./openwrt-koolshare-mod-v2.23-r8972-e25927a06f-x86-64-uefi-gpt-squashfs.img.gz  of=/dev/disk2 bs=1m
2018/10/6

chef-solo knife 使用 tips

  • 初始化项目 knife solo init .
  • 生成cookbook模板chef generate cookbook helloworld
  • 在服务器上执行 knife solo cook lidashuang@10.211.55.6
  • code stype 检查 foodcritic ./site-cookbooks/helloworld/
2018/9/27 posted in  DevOps

2-6 通过explain查询和分析SQL的执行计划

https://www.imooc.com/video/3710

explain 分析执行计划

说明

关于 type 为 index_merge

之前项目一个sql示例

mysql> mysql> explain SELECT COUNT(id) FROM `orders`  WHERE `orders`.`types` = 2 AND `orders`.`status` = 2 AND  `orders`.`pay_type` IN (1, 2);
+----+-------------+--------+------------+-------------+-----------------------------------------------------------------------+----------------------------------------------+---------+------+-------+----------+----------------------------------------------------------------------------+
| id | select_type | table  | partitions | type        | possible_keys                                                         | key                                          | key_len | ref  | rows  | filtered | Extra                                                                      |
+----+-------------+--------+------------+-------------+-----------------------------------------------------------------------+----------------------------------------------+---------+------+-------+----------+----------------------------------------------------------------------------+
|  1 | SIMPLE      | orders | NULL       | index_merge | index_orders_on_types,index_orders_on_status,index_orders_on_pay_type | index_orders_on_types,index_orders_on_status | 5,5     | NULL | 97112 |    14.71 | Using intersect(index_orders_on_types,index_orders_on_status); Using where |
+----+-------------+--------+------------+-------------+-----------------------------------------------------------------------+----------------------------------------------+---------+------+-------+----------+----------------------------------------------------------------------------+

type 为 index_merge

对多个索引分别进行条件扫描,然后将它们各自的结果进行合并(intersect/union)。

links

2018/9/26

3-2 索引优化SQL的方法 笔记

https://www.imooc.com/video/3998

工具

pt-duplicate-key-checke Percona Toolkit 的一部分

sudo apt-get install percona-toolkit

pt-duplicate-key-checke 使用方法简单

$ pt-duplicate-key-checker -h  host -u root -p  password ########################################################################
# shiji_development.daily_shop_statistics
# ########################################################################

# index_daily_shop_statistics_on_date_id is a left-prefix of index_daily_shop_statistics_on_date_id_and_shop_id
# Key definitions:
#   KEY `index_daily_shop_statistics_on_date_id` (`date_id`),
#   UNIQUE KEY `index_daily_shop_statistics_on_date_id_and_shop_id` (`date_id`,`shop_id`),
# Column types:
#     `date_id` int(11) not null
#     `shop_id` int(11) not null
# To remove this duplicate index, execute:
ALTER TABLE `shiji_development`.`daily_shop_statistics` DROP INDEX `index_daily_shop_statistics_on_date_id`;

# ########################################################################
# shiji_migrate_test.daily_shop_statistics
# ########################################################################

# index_daily_shop_statistics_on_date_id is a left-prefix of index_daily_shop_statistics_on_date_id_and_shop_id
# Key definitions:
#   KEY `index_daily_shop_statistics_on_date_id` (`date_id`),
#   UNIQUE KEY `index_daily_shop_statistics_on_date_id_and_shop_id` (`date_id`,`shop_id`),
# Column types:
#     `date_id` int(11) not null
#     `shop_id` int(11) not null
# To remove this duplicate index, execute:
ALTER TABLE `shiji_migrate_test`.`daily_shop_statistics` DROP INDEX `index_daily_shop_statistics_on_date_id`;

# ########################################################################
# Summary of indexes
# ########################################################################

# Size Duplicate Indexes   65360
# Total Duplicate Indexes  2
# Total Indexes            478

查询表的索引状态 SHOW INDEX FROM orders;

Cardinality 表示离散度

links

2018/9/26 posted in  MySQL

HOW TO BUILD A HOME CLIMBING WALL

原文
https://www.rei.com/blog/climb/build-home-climbing-wall

抱石墙的构造方式与木框架房屋的构造方式大致相同:

2018/9/26

Annotation Summary of deploying_rails_applications-cn.pdf.

Ruby (rbenv)

Highlight [5]: 在生产服务器上, 我喜欢用 rbenv 安装、管理不同的 Ruby 版本, 主要是因为我觉得 rbenv 操作简 单、易于理解(因此容易解决出现的问题),而 rvm 太复杂

自动操作

Highlight [7]: 一般来说,在部署和管理服务器的过程中, 如果一年要重复超过一到两次的耗时操作,我都会将其自动化

Highlight [7]: 便于创建“交付准备环境”(staging environment),

Highlight [7]: Chef 用来自动配置,Capistrano 用来自动执行部署过程以及 其他与生产环境和交付准备环境之间的交互。

自动配置所用的工具

Highlight [8]: Chef 是一个自动化工具,由 Opscode 开发,使用 Ruby DSL(Domain Specific Language,领域特定语 言)以一种可重复使用的格式表示配置服务器所需的命令

Highlight [8]: Chef 中,把各个步骤称为“角色”(role)

Highlight [8]: 单机模式下使用 Chef(Chef Solo)。在这种模式下,我们在本地开发平台上定义服 务器的各种角色和设置,然后根据需要手动应用这些设置

Highlight [8]: Knife 是一个命令行工具,为本地开发环境中的 Chef 仓库和远程服务器之间提供交互接口

Highlight [8]: 一般情况下,远程服务器必须是“主”(master)Chef 服务器。不过 Knife Solo 允许在单机模式下使 用 Chef,可以直接和需要配置的服务器交互

Highlight [8]: 。例如,可能有一个配方用来安装 Ruby, 另一个配方用来安装 Rails 程序常用的 gem。相关功能所需的不同配方往往放在一起,组成一个“食 谱”(cookbook)。

Highlight [8]: 安装各组件所需的命令称为“配方”(recipe)

Highlight [8]: Berkshelf 就像是配方的 Bundler。我们先定义好配置需要哪些配方,

创建项目

Highlight [11]: 安装 Chef、Knife Solo 和 Berkshelf

Highlight [11]: 配方(recipe) 定义安装单个组件(例如 Ruby,mysql-server,Monit 等)所需的命令。

Highlight [11]: 食谱(cookbook) 相关的配方集合,例如,“mysql”食谱中包含 MySQL 服务器配方和 MySQL 客户端配方。

Highlight [12]: 节点(node) 要配置的远程服务器。

Highlight [12]: 角色(role) 一系列配方的组合,应用到节点上时,就称为一个角色。

Highlight [12]: ,“Postgres Server”角色可能会包含安装 postgres-server 的配方,安装、设置防火墙的操作,以 及安装合适的服务器监控工具的操作

Highlight [12]: 数据包(data bag) 配方所用的元数据,保存为 JSON 格式文件。例如,要创建的用户列表,以及相应的公钥。

Highlight [12]: Chef 仓库(chef repository) 一系列节点和角色定义

Note [12]: .
├── Gemfile
├── Gemfile.lock
└── my_first_chef_repo
├── Berksfile
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks

7 directories, 3 files

Highlight [13]: Knife 是个命令行工具,可以和远程服务器上的 Chef 交互。

Highlight [13]: Knife Solo 添加了额外的命令, 可以在本地开发设备上直接和要配置的服务器交互(而不用通过 Chef 中央服务器中转)。

Highlight [13]: cookbooks 文件夹用来存放使用 Berkshelf 安装的他人编写的食谱

Highlight [13]: site_cookbooks 文件夹用来存放自己编写的食谱

Redis 配方的结构

Highlight [14]: metadata.rb 元数据文件中详细说明了这个食谱的作用,编写人,依赖件以及版本号。

Highlight [14]: supports 这行指定这个食谱支持的操作系统

Highlight [15]: version 和 recipe 这两行指定配方的名称和版本号。

Highlight [15]: 使用 Berkshelf 时, 这两行是关键的设置, Berkshelf 会查看 metadata.rb 文件,确认要使用的食谱中是否有名称匹配的配方,以及相应的版本。

Highlight [15]: 。depends 指定食谱要依赖的其他食谱。

Highlight [15]: Chef 食谱必须包含一个名为“default”的配方。如果在节点或角色定义中用到了某个食谱,而没有 指定要用哪个配方

Highlight [16]: templates 文件夹中的子文件夹对应的是服务器上所安装的操作系统

概览

Highlight [18]: 节点表示单台服务器

Redis 节点

Highlight [18]: 在 Chef 中,run_list 对应的是一个数组,其中的元素是要应用或安装到节点上的角色或配方。Chef 会按照顺序依次执行列出的配方和角色。

下载额外的食谱

Highlight [23]: 一般都使用 Berkshelf 管理食谱

概览

Highlight [27]: Berkshelf 对 Chef 食谱的作用也是这样。在 Berksfile 中定义 Chef 仓库要使用的食谱,以及各自的 版本。然后执行 berks install 命令安装这些食谱。如果食谱在 metadata.rb 文件的 depends 中定义 了依赖食谱,Berkshelf 会负责安装这些依赖食谱。

Highlight [27]: 和 Bundler 一样,Berkshelf 也会生成一个 .lock 文件(Berksfile.lock),写入食谱及相应的版本号。

2018/9/14 posted in  读书笔记