WindowsのLocal by Flywheelで作ったWordPressにシンボリックリンクを貼り別ディレクトリのthemesデータを同期させる
新規でWP環境を作るだけならLocalをインストールするだけなのですがすでにあるプロジェクトのthemesだけを同期させたいため特殊な対応をしました。
まずは公式ドキュメント通りLocalのインストール、WPの作成をします。 localwp.com
themesを同期させる
昔のLocalだとvolumesという設定でファイル同期ができましたが今はシンボリックリンクを貼る必要があるよう
[WordPress] ”Local by Flywheel”でシンボリックリンクを作成する方法
Windows PowerShellを管理者で起動しシンボリックリンクを貼ります
# ローカルにある参照したいthemes # "C:\Users\user_name\workspace\wordpress\wp-content\themes\" # LocalでインストールしたWPのディレクトリ # "C:\Users\user_name\Local Sites\nisso\app\public" New-Item -Value "C:\Users\user_name\workspace\wordpress\wp-content\themes\" -Path "C:\Users\user_name\Local Sites\site_name\app\public\themes" -ItemType SymbolicLink
※既にインストールしたWPのthemesがある場合は削除しておく必要があります。
WSL Elasticsearchの起動ができない java.lang.IllegalArgumentException: Plugin [analysis-kuromoji] was built for Elasticsearch version 7.8.0 but version 7.10.0 is running
こんなエラーが出た
java.lang.IllegalArgumentException: Plugin [analysis-kuromoji] was built for Elasticsearch version 7.8.0 but version 7.10.0 is running
$ sudo service elasticsearch restart * Starting Elasticsearch Server uncaught exception in thread [main] java.lang.IllegalArgumentException: Plugin [analysis-kuromoji] was built for Elasticsearch version 7.8.0 but version 7.10.0 is running at org.elasticsearch.plugins.PluginsService.verifyCompatibility(PluginsService.java:352) at org.elasticsearch.plugins.PluginsService.loadBundle(PluginsService.java:622) at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:479) at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:168) at org.elasticsearch.node.Node.<init>(Node.java:346) at org.elasticsearch.node.Node.<init>(Node.java:289) at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:227) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:227) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) For complete error details, refer to the log at /var/log/elasticsearch/elasticsearch.log [fail]
プラグインの対応バージョンが違うらしい
Elasticsearchをアップデートだけしてプラグインが古いままのよう
一旦removeしてインストールし直す
sudo /usr/share/elasticsearch/bin/plugin remove analysis-kuromoji sudo /usr/share/elasticsearch/bin/plugin install analysis-kuromoji
起動成功
$ sudo service elasticsearch restart * Starting Elasticsearch Server [ OK ]
WSLでelasticsearch-pluginをinstallする
pathが通っていないのかインストールできず
sudo elasticsearch-plugin install analysis-kuromoji sudo: elasticsearch-plugin: コマンドが見つかりません
/usr/share/elasticsearch/bin
に入っていた
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
WSLでDockerを使いMySQL5.6をインストールしてdumpデータをインポートする
WSLのUbuntuにMySQL5.6をインストールしようとしたところ、依存関係が解決できず正しくインストールや起動ができなかったのでDockerを利用してMySQL5.6を用意した手順をまとめます。
docker pullと起動
ubuntu-mysql56
を使います。
Docker Hub
docker pull danbelden/ubuntu-mysql56 docker run --name mysql56 -d -p 3306:3306 danbelden/ubuntu-mysql56
mysqlに接続
# psを確認 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e17a5f3251b2 danbelden/ubuntu-mysql56 "entrypoint.sh mysqld" 9 hours ago Up 22 minutes 0.0.0.0:3306->3306/tcp magical_mendeleev # execで接続 docker exec -it e17a5f3251b2 bash # mysql-clientを使い接続 mysql --host 127.0.0.1 --port 3306 -u root -p # databaseの作成などをする
dumpデータのインポート
dump.sqlを使いDBのインポート
mysql --host 127.0.0.1 --port 3306 -u root -p database_name< dump.sql
Rails Searchkickで circuit_breaking_exception Data too largeエラー 分割インデックスする方法
RailsアプリでSearchkickを使いElasticsearchのreindexをしようとしたところデータ量が大きすぎるとのエラー
Elasticsearch::Transport::Transport::ServerError · [429] {"error":{"root_cause":[{"type":"circuit_breaking_exception","reason":"[parent] Data too large, data for [<http_request>] would be [7474977728/6.9gb], which is larger than the limit of [7429763891/6.9gb], real usage: [7473437560/6.9gb], new bytes reserved: [1540168/1.4mb]","bytes_wanted":7474977728,"bytes_limit":7429763891,"durability":"PERMANENT"}],"type":"circuit_breaking_exception","reason":"[parent] Data too large, data for [<http_request>] would be [7474977728/6.9gb], which is larger than the limit of [7429763891/6.9gb], real usage: [7473437560/6.9gb], new bytes reserved: [1540168/1.4mb]","bytes_wanted":7474977728,"bytes_limit":7429763891,"durability":"PERMANENT"},"status":429}
Parallel Reindexingをすることバックグラウンドジョブ(今回だとSidekiqを利用)を使って解決できるらしい
GitHub - ankane/searchkick: Intelligent search made easy with Rails and Elasticsearch
Product.reindex(async: true) # indexが終わるタイミングを検知できないため # indexが終わってからaliasを書き換える Product.search_index.promote(index_name)
indexが終わるのを待って自動で切り替えまでするには
Searchkick.redis = Redis.new Product.reindex(async: {wait: true})
とのことだが永遠に続く Batches left: 1
Product.reindex(async: {wait: true}) => Enqueued Searchkick::BulkReindexJob (Job ID: 12345) to Sidekiq(searchkick) with arguments: {:class_name=>"Product", :index_name=>"products_20201109161642890", :batch_id=>1, :min_id=>1, :max_id=>1000} Created index: products_20201109161642890 Batches left: 1 Batches left: 1 Batches left: 1 Batches left: 1 Batches left: 1 ...
調査してみると Searchkick.redis = Redis.new
の設定をSidekiq側でもしないといけなかった
config/initializers/elasticsearch.rb
に以下の設定を追加することで無事 Parallel Reindexing
できました。
Searchkick.redis = Redis.new