GithubHelp home page GithubHelp logo

notes's Introduction

notes's People

Contributors

alvin2ye avatar

Watchers

 avatar  avatar

notes's Issues

Ubuntu Install ruby-oci8 Gem Note

sudo apt-get install build-essential libaio-dev unzip

mkdir /opt
mkdir /opt/oracle
cd /opt/oracle

wget https://dn-agi-public3.qbox.me/xxx/instantclient-sdk-linux-12.1.0.2.0.zip
wget https://dn-agi-public3.qbox.me/xxx/instantclient-basic-linux.x64-12.1.0.2.0.zip
wget https://dn-agi-public3.qbox.me/xxx/instantclient-sqlplus-linux-12.1.0.1.0.zip

unzip instantclient-basic*
unzip instantclient-sdk*
unzip instantclient-sqlplus*

cd /opt/oracle/instantclient1*
ln -s libclntsh.so.12.1 libclntsh.so

export LD_LIBRARY_PATH=/opt/instantclient

gem install ruby-oci8

自动喷码机如何实现动态打印

自动喷码机如何实现动态打印

需求:

喷码机要求支持通讯模块
前面一台,测试机器(我们自己开发的),

  • 测试成功, 我们通过RS232接口告诉喷码机 打印101,再成功102
  • 测试失败, 我们通过RS232接口告诉喷码机 打印空白(表示不能喷码)

喷码机通讯连接方式:

标准RS232接口说明
-w628

只要接3条

  • 设备GND(5) - 电脑GND(5)
  • 设备TXD(3) - 电脑RXD(2)
  • 设备RXD(8) - 电脑TXD(3)

找线(这是一条,平行的,一头公,一头母的线)
-w717

用万用表测到(公头,颜色对照)

  • 鲜红 1
  • 白 7
  • 绿 3
  • 黄 4
  • 紫 6
  • 灰 8
  • 黑 5
  • 橙 2
  • 蓝 9

-w508

从厂家获取说明文件

-w560

注意文档中说设备号是01,实际是00

以下是调试时的截图

-w363

使用说明:

  1. 启动设备
  2. 菜单-变量数据-修改-通讯-固定长度(长度不足要自己填空白)
  3. 菜单
    1. 编辑-文件-新建文件-清楚当前内容
    2. 文本-绑定为变量
    3. 确定
  4. 连接设备
  5. 发送更新命令
  6. 喷码打印
  7. 重复上两步

有时需要清理缓存

相关其他文档:

https://tower.im/teams/13647/projects/131358/files/

怎么使用 ELK Stack 监控 日志.

怎么使用 ELK Stack 集中管理日志

目地:

  • 集中存储: 不会丢, 找得快
  • 搜索方便
  • 报表方便

通过搜索, 发现 ELK Stack 是普遍方案, 同时又可以用docker跑.

ELK Stack 是 Elasticsearch、Logstash、Kibana 三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于 Elastic.co 公司名下,故有此简称。

  1. Ruby with docker

    docker run -it --rm -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 5000:5000 --name elk sebp/elk

  2. 进入 container, 复制 /usr/local/etc/ssl/certs/logstash-beats.crt 到客户端

  3. 配置 filebeat.yml

    filebeat: 
    prospectors: 
      - 
        document_type: nginx-access
        paths: 
          - nginx-access.log
    output: 
    logstash: 
      enabled: true
      hosts: 
        - "localhost:5044"
      tls: 
        certificate_authorities: 
          - logstash-beats.crt
    
  4. Run

    filebeat -v -e

REF:

Redis如何迁移数据

目标:

想把 redis1 服务器的数据迁移到Redis2:

  1. 进入 redis2
  2. redis-cli
  3. SLAVEOF redis1 6379
  4. 停掉redis1
  5. 断开复制模式 SLAVEOF NO ONE
  6. 完成

ruby invoke webservices with savon

require 'rubygems'
require 'bundler'
Bundler.setup(:default)

require "savon"
require "pry"

client = Savon.client(
  :wsdl => "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl",
  :open_timeout => 10,
  :read_timeout => 10,
  :log => false
)

response = client.call(:verify_email, :message => { :email => "[email protected]", "LicenseKey" => "?" })
response_text = response.body[:verify_email_response][:verify_email_result][:response_text]
p response_text


=begin
➜  use_savon  ruby main.rb
"Email Domain Not Found"
➜  use_savon  ruby main.rb
"User Not Found"
➜  use_savon  ruby main.rb
"Mail Server will accept email"
=end

homeland-docker 调试笔记 验证码无论怎么输入都无效

vendor/bundle/ruby/2.7.0/gems/rucaptcha-2.5.3/lib/rucaptcha/controller_helpers.rb 加入日志打印

module RuCaptcha
  module ControllerHelpers
    extend ActiveSupport::Concern

    included do
      helper_method :verify_rucaptcha?
    end

    # session key of rucaptcha
    def rucaptcha_sesion_key_key
      session_id = session.respond_to?(:id) ? session.id : session[:session_id]
File.open("/tmp/a", "a") {|f| f.puts ["sessionid ", session_id].inspect }

      warning_when_session_invalid if session_id.blank?

      # With https://github.com/rack/rack/commit/7fecaee81f59926b6e1913511c90650e76673b38
      # to protected session_id into secret
      session_id_digest = Digest::SHA256.hexdigest(session_id.inspect)
      ['rucaptcha-session', session_id_digest].join(':')
    end

    # Generate a new Captcha
    def generate_rucaptcha
      res = RuCaptcha.generate()
      session_val = {
        code: res[0],
        time: Time.now.to_i
      }
File.open("/tmp/a", "a") {|f| f.puts ["generate_rucaptcha 2020-12-24_091847 write_session ", rucaptcha_sesion_key_key].inspect }
      RuCaptcha.cache.write(rucaptcha_sesion_key_key, session_val, expires_in: RuCaptcha.config.expires_in)
      res[1]
    end

    # Verify captcha code
    #
    # params:
    # resource - [optional] a ActiveModel object, if given will add validation error message to object.
    # :keep_session - if true, RuCaptcha will not delete the captcha code session.
    # :captcha - if given, the value of it will be used to verify the captcha,
    #            if do not give or blank, the value of params[:_rucaptcha] will be used to verify the captcha
    #
    # exmaples:
    #
    #   verify_rucaptcha?
    #   verify_rucaptcha?(user, keep_session: true)
    #   verify_rucaptcha?(nil, keep_session: true)
    #   verify_rucaptcha?(nil, captcha: params[:user][:captcha])
    #
    def verify_rucaptcha?(resource = nil, opts = {})
      opts ||= {}

File.open("/tmp/a", "a") {|f| f.puts ["verify_rucaptcha 2020-12-24_091837 get_session ", rucaptcha_sesion_key_key].inspect }
      store_info = RuCaptcha.cache.read(rucaptcha_sesion_key_key)
      # make sure move used key
      RuCaptcha.cache.delete(rucaptcha_sesion_key_key) unless opts[:keep_session]

      # Make sure session exist
      if store_info.blank?
        return add_rucaptcha_validation_error
      end

      # Make sure not expire
      if (Time.now.to_i - store_info[:time]) > RuCaptcha.config.expires_in
        return add_rucaptcha_validation_error
      end

      # Make sure parama have captcha
      captcha = (opts[:captcha] || params[:_rucaptcha] || '').downcase.strip
      if captcha.blank?
        return add_rucaptcha_validation_error
      end

      if captcha != store_info[:code]
        return add_rucaptcha_validation_error
      end

      true
    end

    private

    def add_rucaptcha_validation_error
      if defined?(resource) && resource && resource.respond_to?(:errors)
        resource.errors.add(:base, t('rucaptcha.invalid'))
      end
      false
    end

    def warning_when_session_invalid
      return unless Rails.env.development?

      Rails.logger.warn "
        WARNING! The session.id is blank, RuCaptcha can't work properly, please keep session available.
        More details about this: https://github.com/huacnlee/rucaptcha/pull/66
      "
    end
  end
end

发现验证时Session丢了?看 Rails日志,发现

HTTP Origin header (https://a.com) didn't match request.base_url (http://a.com)

调查发现最终是web container 内 /etc/nginx/homeland.conf

-     proxy_set_header X-Forwarded-Proto $scheme;
+    proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

原因:默认方式是直接安装到一台服务器,而我是需要 traefik 一步一步代理进来

ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8)

用docker 时因为包安装的少, 有几率抛这个错


ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8):
    46:     link rel="apple-touch-startup-image" href="/demo/img/splash/ipad-portrait.png" media="screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait)"
    47:     link rel="apple-touch-startup-image" href="/demo/img/splash/iphone.png" media="screen and (max-device-width: 320px)"
    48:
    49:     = include_gon
    50:     /- if Rails.env.development?
    51:       /script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react-with-addons.js"
    52:       /script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react-dom.js"
  app/views/layouts/application.html.slim:49:in `_app_views_layouts_application_html_slim__2886400402124914098_47450135072760'

查下locale

root@a719268c75f0:/app# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

解决方法:

apt-get install locales
echo 'en_US.UTF-8 UTF-8' > locale-gen
locale-gen

如果是Dockerfile 里

RUN apt-get install locales
RUN echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen
RUN locale-gen
ENV LC_ALL en_US.UTF-8

查 locale

LANG=
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"

如何基于 docker 开始一个新的Rails项目

cat <<EOF >> Dockerfile

FROM ruby:3-alpine3.13
EXPOSE 3000

RUN apk add --update \
  build-base \
  mariadb-dev \
  nodejs yarn \
  tzdata \
  && rm -rf /var/cache/apk/*

RUN mkdir -p /app
WORKDIR /app
VOLUME /app

ADD Dockerfile /Dockerfile
CMD ["sh", "-c", "env >> /etc/environment ; tail -f /dev/null"]

EOF

# docker-compose.yml

cat <<EOF >> docker-compose.yml

version: "3"

services:
  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - "mysql_data:/var/lib/mysql"
      - ".:/app"
  main:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - ".:/app"
      - "ruby_bundle:/usr/local/bundle"
      - "~/.ssh/id_rsa:/root/.ssh/id_rsa"
    depends_on:
      - mysql
volumes:
  mysql_data:

EOF

docker-compose up -d
docker-compose exec main sh -c "gem install rails"
docker-compose exec main sh -c "rails new . -d mysql"
vim database.yml
docker-compose exec main sh -c "rake db:create"
docker-compose exec main sh -c "rails s -b 0.0.0.0"


# 可能用到
# docker-compose exec main sh -c "bundle"
# docker-compose exec main sh -c "rails webpacker:install"


docker-compose wordpress

version: '2'

services:

  wordpress:
    image: wordpress
    ports:
      - 10500:80
    environment:
      WORDPRESS_DB_PASSWORD: password

  mysql:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - ./data:/var/lib/mysql

realpath

我们经常用到全文件名 一般是用 ls 加 pwd 来组合得到. 对于最求效率的来说, 这个肯定不行 「realpath」你值得拥有

deployer@s155:~/script$ realpath start_wzhw_service.bash
/home/deployer/script/start_wzhw_service.bash

教学: 如何用Docker开发 rails + react 的项目笔记

vi docker-compose.yml

version: "2"

services:
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=xxx
    volumes:
      - "mysql-data:/var/lib/mysql"
      - "./mnt:/mnt"

  redis:
    image: redis:3.2-alpine
    volumes:
      - "redis-data:/data"
      - "./mnt:/mnt"
  main:
    image: ubuntu
    hostname: check_me-dev
    ports:
      - "10980:8080"
      - "10900:3000"
    volumes:
      - ".:/app"
      - "/Users/alvin/.ssh/id_rsa:/root/.ssh/id_rsa"
      - "./mnt:/mnt"
    environment:
      - DOCKER_ENV=development
    depends_on:
      - redis
      - mysql
volumes:
  mysql-data:
  redis-data:

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
bundle config mirror.https://rubygems.org https://gems.ruby-china.org
gem install rails
export PATH=/usr/local/node/bin:/usr/local/bundle/bin:$PATH
cd /app
rails new .
rails g scaffold book name:string
rails g controller home index
mkdir frontend
cd frontend
npm config set registry https://registry.npm.taobao.org 
npm info underscore
npm install -g create-react-app
create-react-app .
PORT=8080 HOST=0.0.0.0 npm run start
http://aa.docker.do8.cc:10980/static/js/bundle.js

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.