MySQL Workbenchでバージョンエラー

MySQL Workbenchでダンプをするときに mysqldump Version Mismatch のエラーが発生した。
対象サーバのMySQLのバージョンが古かったためローカルのmysqldumpのバージョンを合わせる必要がある
エラーのダイアログをよく見ると対象サーバのバージョンが書いてあるのでまずはそのバージョンをインストールする。
私の場合は5.7.xxxだったので
手元のMBPでbrew install mysql@5.7
とインストールする。

インストール時のメッセージ中に

If you need to have mysql@5.7 first in your PATH run:
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> /Users/hideokashioka/.bash_profile
このようなメッセージが表示されていると思うがmysqldumpのパスは
/usr/local/opt/mysql@5.7/bin/mysqldump
となります。


Preference>AdministrationにあるPath to mysql Tool:の部分に先ほどのパスを入力して
ダイアログを閉じてください。
そうするとmysqldumpが指定のパスのものを利用するようになるのでmysqldump Version Mismatchは発生しなくなります。

VsCodeデバッグでエラー

VsCodeのpythonデバッグでエラーが発生した。

Preparing to run teams.lambda_handler locally...
Building SAM Application...
An error occurred trying to run SAM Application locally: Error with child process: pyenv: sam: command not found
,
The `sam' command exists in these Python versions:
,  3.7.0

pythonはインストールされていたはずだったがpyenvに設定して回避できた

a$ python3 --version
Python 3.7.0
$ pyenv global system 3.7.0

SAMのURLパラメタの分析にflaskを使う

template.ymlにて

  SampleFlaskFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: src/
      Handler: flask_test.lambda_handler
      Runtime: python3.7
      Events:
        HttpGet:
          Type: Api
          Properties:
            Path: '/flask'
            Method: GET
        HttpGetProxy:
          Type: Api
          Properties:
            Path: '/flask/{proxy+}'
            Method: GET

のような設定をしている時に

lambda側でパラメタを取得したい場合は

from flask import Flask, jsonify
import awsgi

app = Flask(__name__)

@app.route('/flask/<name>')
def output_name(name):
    return jsonify({'input': name})

def lambda_handler(event, context):
    return awsgi.response(app, event, context)

このようにすると取得できる

なおアクセスできるURLは
http://127.0.0.1:3000/flask/name

SAM側で振り分けたflaskというディレクトリもlambdaでも設定する必要がある。(アクセスしたパスがそのまま渡ってきているイメージか)

@app.route('/flask/<name>/test/<test>/test2/<test2>')
def output_name(name,test,test2):
    return jsonify({'value': name + test + test2}

このように複数の値の取得も可能

WordPressの翻訳プラグインBogoでリンクエラー

Bogoをアップデートしてv3.3にしたところ日本語<->英語のリンクが表示されないケースがあった。
(ショートコードので表示している部分)
固定ページの一覧を見ると英語、日本語共にドキュメントは存在している
英語ページの言語の部分を見ると

このような表示で元のページとのリンクが切れているようだ。

言語の編集部分のアップデートがあったようで以前の言語表示の部分とは違っていた。

取り急ぎ、前のバージョンに戻してしのぐ事とする。

前のバージョンはプラグインディレクトリから探すことができる

Bogo

https://ja.wordpress.org/plugins/bogo/advanced/&#8221;
このページの一番下の部分

指定するバージョンはアップデートする前のバージョーンが良い
(なお、他のプラグインなどでセキュリティアップデートなどの場合はプラグインの利用を停止するなど検討が必要)

/plugins/ディレクトリの前のプラグイン(bogo)を削除するかリネームして
いつもプラグインのアップロード方法を行うか

コンソールで
$plugins mv bogo bogo_bak
$wget https://downloads.wordpress.org/plugin/bogo.3.2.zip
$unzip bogo.3.2.zip
などとしてプラグインのダウングレードを行う。

とりあえずは前のバージョンに戻った。(根本的解決ではないので、アップデートを待つかソースコードを見てみる時間を取らないと、、、)

CircleCIでdocker-composerを使う

ローカルの環境をdocker-composerで作っていたものをCircleCIにあげたときにCI回せるように設定しました。

version: 2
jobs:
  build:
    # CircleCI側の仮想マシンを利用
    machine: true
    environment:
      # githubのリポジトリ指定
      - DOCKER_IMAGE_REPO: [github_acount]/[repository_name]
    # 作業用ディレクトリの指定(こだわりなければ何でも)
    working_directory: ~/[repository_name or somthing]
    steps:
      # githubからソースコードを取得
      - checkout

      # docker-composeコマンドをそのまま実行(buildなども可能   
      - run:
          # 実行時のカーソルに表示される(無くても良い)
          name: docker compose up
          command: docker-compose up -d
      # コマンド
      - run: 

      # 初期処理とか(初期処理用にinit.shを作っている場合)
      name: init
      command: ./init.sh

AmazonLinuxにMySql(5.7)のインストール

リポジトリの追加
sudo sudo yum -y install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
mysqlのインストール
sudo yum -y install mysql-community-server
起動設定
sudo chkconfig mysqld on
サービスの起動
sudo service mysqld start

Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]

mysqlのルートのパスワードは
sudo vi /var/log/mysqld.logの中に
A temporary password is generated for root@localhost: XXXXXXXXXXXX
という行があってここに書いてあるのがパスワードです。

mysql -u root -p
で上記パスワードを入力するとコンソールで操作が可能になります。

Laravel実際に投げているクエリーの取得(5.2)

use IlluminateSupportFacadesDB;

DB::connection()->enableQueryLog();

ここでデータベースへの問い合わせ

$queries = DB::getQueryLog();
dd($queries);

もしくは

Event::listen('IlluminateDatabaseEventsQueryExecuted', function ($query) {
var_dump($query->sql);
var_dump($query->bindings);
var_dump($query->time);
});

https://laravel.com/docs/5.0/database#query-logging
http://laravel-tricks.com/tricks/display-all-sql-executed-in-eloquent#comment-2655309790

Drupalの更新でエラーが出た時 cache bin specified

放置気味だったDrupalのアップデートにdrush upを行った所
WD php: Exception: Invalid or missing cache bin specified: datasources in DrupalDatabaseCache->clear() (line 520 of [error]
このようなメッセージが出たどうもdatasourceモジュールのキャッシュが削除出来ないとかそういう状態のようだ。
不要なモジュールの場合は管理画面からモジュールを無効にしてアップデートを行うといいでしょう

データの移行時に入れていたモジュールだったのでこちらを無効にして再度実行してみたところ
今度は
WD php: PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘domaintools.cache_feeds_http’ doesn’t exist: [error]

今度はfeedsでキャッシュテーブルが無いと怒られた、SQLでテーブルを作ってしまおうとも思ったがまずは手動でモジュールのアップデートを試す。

$drush dl feeds
$drush updb

feeds module :
7209 – Reschedules feeds jobs.
7211 – Fix importer mappings for file and image fields to use :uri convention.
7212 – Create {cache_feeds_http} table.

実行するとメッセージにcache_feeds_httpの文字が
というかdrush updbしたときのメッセージが見やすい!

この後、drush upで無事アップデートできました。

drush up でエラーが出た時は
引っかかったモジュールを個別にアップデートするのが良さそうです。

Base table or view not found

Drupalのモジュールを開発していて
モジュール内でアクセス制御を行おうと思い。
drupal_access_denied();や
drupal_not_found();を実行してみると
Base table or view not foundのエラーが

Drupalとは別データベースにアクセスしていたのが原因なようで
db_set_active(‘external_database’);を実行すると
エラーメッセージ的に言うとベースデータベース?が切り替わるようで
not found等の処理を行う前にdb_set_active(‘default’);で
デフォルトのデータベースに戻してあげると
drupal_not_found();とした場合の制御が戻ります。