近期出错小记III

记录下近期遇到的问题及解决方法。

Nuxt 中引入 select2

安装select2:

yarn add select2
yarn add select2-bootstrap-theme

引入 css:

在assets/stylesheets/中添加select2.scss:

@import 'select2/dist/css/select2.css';
@import 'select2-bootstrap-theme/dist/select2-bootstrap.css';

nuxt.config.js文件中,css部分添加:

  css: [
      ......
    '~assets/stylesheets/select2.scss',
    .....
  ]  

新增组件Select2.vue:

<template>
  <select id="select2" :name="name" multiple="multiple">
    <option v-for="item in items" :key="item.id" :value="getValue(item)">{{ getLabel(item) }}</option>
  </select>
</template>

<script>
import $ from 'jquery'
import select2 from 'select2'

export default {
  props: {
    items: { required: true },
    name: { required: true },
    valueMethod: { default: 'id' },
    labelMethod: { default: 'name' }
  },
  mounted() {
    $(this.$el).select2({
      theme: "bootstrap"
    })
  },
  methods: {
    getValue(obj) {
      return _.result(obj, this.valueMethod)
    },
    getLabel(obj) {
      return _.result(obj, this.labelMethod)
    }
  }
}
</script>

rails 迁移 array 类型数据

问题描述:

数据库PG,添加 array 类型, 迁移数据:

class Poem < ActiveRecord::Base; end
def change
    change_table :poems do |t|
        t.string :content, array: true, default: []
    end

    Poem.update_all(content: [ "test" ])
end

rake db:migrate 时 ,一直报错:can’t quote Array.

解决方法:

使用类方法: reset_column_information

修改上面的migration代码:

class Poem < ActiveRecord::Base; end
def change
    change_table :poems do |t|
        t.string :content, array: true, default: []
    end

    Poem.reset_column_information
    Poem.update_all(content: [ "test" ])
end

ok.

SSH AuthenticationFailed

问题描述:

远端ssh 正常登录服务器,但是部署的时候,执行报错:

cap staging deploy:check

Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user [email protected]

终端:

ssh [email protected]

正常登录。

解决方法:

Google一圈,参考Net::SSH::AuthenticationFailed: Authentication failed for user

服务器执行:

ssh-add -l

显示:

The agent has no identities.

执行:

ssh-add -k ~/.ssh/authorized_keys

显示:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/deploy/.ssh/authorized_keys' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

执行:

sudo chmod 600 ~/.ssh/authorized_keys
ssh-add -k ~/.ssh/authorized_keys

报错:

Error loading key "/home/deploy/.ssh/authorized_keys": invalid format

玩伤。

最后奇葩的解决方法竟然是:

本地 vi ~/.ssh/config, 添加 host:

Host space
  HostName 118.190.xxx.xxx
  User deploy
  IdentityFile ~/.ssh/id_rsa
  AddKeysToAgent yes

再次执行:

cap staging deploy:check

OK了「但不知道为什么就突然好了,应该是修改文件权限的功劳……」

Vim register

Vim 中的 register 用来存储信息。

Vim uses it registering commands you enter, files you open, text you input, etc. What vim does is to save all this data on a .viminfo file.

register 有几种,在 command mode 下使用 :help registers可以查看。

说其中两种。

  • unnamed register

    匿名寄存器,d,c,s,x 被删除的字符会存在匿名寄存器,所以 insert mode下使用<Ctrl+r> + " 会粘贴上一步删除的字符。

  • 26 named registers

    命名的register,register的名字是a-z 或者 A-Z 中的任意一个。

    比如normal mode 下,复制光标所在位置一行的内容,放到register d 中:

    "dyy
    

    下次粘贴时, normal mode下:

    "dp
    

    如果想要在register d 中追加内容,可以使用D。

    "Dyy
    

    会将该行追加到register d 中,下次粘贴时,会是追加了新内容的register d。

参考

reset_column_information

Net::SSH::AuthenticationFailed: Authentication failed for user

Vim Registers, The Powerful Native Clipboard!