ピット記[更新継続]


フロントエンド/バックエンド(Node/Db)など、coding中に発生した比較的解決しにくい問題や興味深い問題を記録するために使用され、更新が継続されます...
バックエンド
Node
redisクラスタモードでpiplineエラー(2019.3.14)
  • 問題説明:redisクラスタモードでpipelineを使用して異なるkey値を操作するとAll keys in the pipeline should belong to the same slot
  • とエラーが発生する.
  • 問題解決:
  • redisクラスタのslot:クラスタ内の各ノードには固定slotの数があり、すべての格納key値はhash計算後に異なるslot、すなわち異なるノードに格納されるため、pipline時にkey値インデックスが同じslotでない場合、上記エラー
  • が報告される.
  • 解決策:同じタイプのkey値でなければpiplineで操作せず、同じタイプであればhash計算
  • に使用されるため、同じ部分を'{}'で包む
  • 例えば、redis.pipline().set('cache1', 1).set('cache2', 2).exec()redis.pipline().set('{cache}1', 1).set('{cache}2', 2).exec()
  • に変更する.
  • オリジナル航空券

  • eggjs修正ファイルreload問題(2017.8.30)
  • 問題説明:開発環境でプロジェクトを開始し、ファイルを修正するとeggjsは自動的にreloadするが、reload後のすべての要求はpendding状態であり、すべてのlogは正常状態である.
  • 問題探索:
  • eggjsのissueで同様の問題が発見され、基本的にはファイルを修正した後にreloadすることができず、crtl+cを手動で再起動する必要があり、解決方法は基本的に再インストール依存であるが、1回の操作後も依然としてだめである.
  • 足場で新しく生成された項目を使用してもこの問題は残っている
  • .
  • 同僚のパソコンではこの問題は発生していません
  • は公式issueに質問して、個別の現象の大物なので
  • を解決しません
  • 現在、問題がコンピュータによるものであることが確認でき、私だけがこの問題を発生した.既成の解決策がない以上、ソースコードに希望を託すしかない.

  • 問題の解決:
  • eggjsドキュメントでreloadを担当するのはcluster-reloadモジュールで、コードは簡単で、80+行しかなく、読みやすいことがわかります.
  • は、reset()(再起動後の新しいworkプロセス)とnewWorker(旧workプロセス)の状態をそれぞれ印刷する、すべてが正常な状況で行われていることがわかるが、最後の新しいworkプロセスでは不思議なことにfirstWorkerの状態であり、再起動はトリガーされていない.
  • はいくつかの試みを行い、最終的に成功した解決策があった:dead(fork新しいworkプロセス)の前にcluster.fork()(古いプロセスを殺す).

  • 後記:本当の問題の原因は見つからなかったが(まだ深く掘ることができる)reloadの卵の痛みの問題を解決したが、この方法はnode_を修正する必要がある.modulesのソースコードは不便で、開発過程でしか使用できません.生産環境では優雅な発売プロセスが必要です.

  • Sequelize migrate changeColumn問題
  • 問題説明修正フィールドタイプエラーfirsterWorker.kill(KILL_SINGNAL)データベース:Postgresqlエラー原因:フィールドのデータ型をcannot be cast to type integerからSTRINGに変更する(文書の書き方INTEGERに完全に従っている)が、Sequelize変換によるsql文に問題があり、Postgresqlには適用されず、フィールドtypeのタイプ
  • を変更する必要がある.
  • 問題解決
    //             
    queryInterface.changeColumn('table', 'column', {
      type: 'INTEGER USING CAST("column" as INTEGER)',
      allowNull: false,
    })
    issue詳細
  • フロントエンド
    Vuejs
    Element-ui popoverエラー(2018.02.09)
  • エラー内容:[Vue warn]:Error in directive popopopover bind hook:“TypeError:Cannot read property'$refs'of undefined”
  • コード
    
    
    import { Popover } from 'element-ui'
    export default {
      name: 'Manage',
      components: { Popover },
      directives: {
        popover: Popover.directive
      }
    }
    
  • 解決Popoverのdirectiveにはbindライフサイクルのフックが1つしかなく、コードqueryInterface.changeColumn(tableName: String, attributeName: String, dataTypeOrOptions: Object, options: Object)が1つしかなく、エラー中の$refsは構築中のrefs全体であり、vnode.context.$refs[binding.arg].$refs.reference = el;が使用命令の後ろに書かれていたため、このときrefはまだコンポーネントに登録されていないため、エラー
  • を報告する.
  • 正しいコード
    
    
    import { Popover } from 'element-ui'
    export default {
      name: 'Manage',
      components: { Popover },
      directives: {
        popover: Popover.directive
      }
    }