Macでspace2回押したら「.(ドット)」に変換されるのをやめる方法
いつからか記憶にないのですが、Macでtext書いててspace2回押したら「.(ドット)」に変換されてるのがうざいので、止めてみました。
ここの「スペースバーを2回押してピリオドを入力」のチェックをoff。
英文書く人にはある方が嬉しいのだろうか?ほとんどの人いらんよね。
anyenvからasdfに移行(M1 Mac)
豊富なプラグインとshellの起動が短くなるという話を聞いて asdf を入れてみました。
anyenvはshellの起動の度にワンテンポ待つ(約1秒ほど)のが少し気になっていました。
Installation
以下に、環境ごとに記載されています。
Getting Started | asdf
私はmacにhomebrewで入れています。
問題点
asdf自体のinstallはうまくいきましたが、ruby3.1のinstallでエラーとなりました。
asdf install ruby 3.1
BUILD FAILED (macOS 11.2 using ruby-build 20211227) Inspect or clean up the working tree at /var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF Results logged to /var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.log Last 10 log lines: from /private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:219:in `block in mkdir_p' from /private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:211:in `each' from /private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:211:in `mkdir_p' from ./tool/rbinstall.rb:218:in `makedirs' from ./tool/rbinstall.rb:331:in `prepare' from ./tool/rbinstall.rb:432:in `block in <main>' from ./tool/rbinstall.rb:1127:in `block in <main>' from ./tool/rbinstall.rb:1124:in `each' from ./tool/rbinstall.rb:1124:in `<main>' make: *** [do-install-all] Error 1
makedirs のエラーなのでディレクトリの作成で失敗している可能性がありそうです。 logが以下に出力されているとのことで読んでみます。
/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.log
すると、permisson deniedとのこと。
/private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:240:in `mkdir': Permission denied @ dir_s_mkdir - /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Users (Errno::EACCES)
該当ディレクトリを見ると、symlinkでした。
$ll /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk lrwxr-xr-x 1 root wheel 14B 8 29 14:29 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk@ -> MacOSX11.3.sdk $ls -al /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/ total 32 drwxr-xr-x 8 root wheel 256 12 30 07:56 ./ drwxr-xr-x 6 root wheel 192 8 29 14:29 ../ -rw-r--r-- 1 root wheel 127 3 16 2021 Entitlements.plist -rw-r--r-- 1 root wheel 4512 3 16 2021 SDKSettings.json -rw-r--r-- 1 root wheel 3691 3 16 2021 SDKSettings.plist drwxr-xr-x 4 root wheel 128 3 16 2021 System/ drwxr-xr-x 3 rochefort wheel 96 12 30 07:56 Users/ drwxr-xr-x 7 root wheel 224 3 16 2021 usr/
解決方法
とりあえず権限付与。
sudo chown $(whoami) /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
これ、CommandLineTools のversionが変更する度にやらないといけなさそう。。
anyenv
anyenv消しても良いですが、一旦保険のために、shellでの読み込みだけコメントアウトしています。 問題なければ、uninstall & .anyenv を削除予定。
Configuration
.tool-versions
に各種versionを記載すれば自動で読み込んでくれます。
rubyもnodeも1ファイルに書けるのがメリットのようです。
従来の.node-version、.ruby-version を使いたい場合
legacy_version_file
というoptionが用意されています。
Configuration | asdf.
$HOME/.asdfrc
に以下のように書けば、anyenv同様の .node-version、.ruby-version などを読み込んでくれます。
legacy_version_file = yes
メンバー全員の環境を強制できない場合は、これを入れておくのが良さそうです。
どのversionでどのファイルを読み込んでるかは、currentコマンドで確認できます。
$ asdf current nodejs 14.15.4 /Users/rochefort/work/apps/qiita_advent/.node-version ruby 3.1.0 /Users/rochefort/work/apps/qiita_advent/.ruby-version
その他
global 設定。
$ asdf global ruby 3.1.0
PostgreSQLからsqliteの移行をRailsを使って行う
この記事は
Ruby on Railsのカレンダー | Advent Calendar 2021 - Qiita 18日目の記事です。
昨日に引き続き、空いていたので参加してみました。
背景
昨日、Advent Calender Ranking 2021 に New RelicをRailsアプリにinstallしたところ、DB部分で速度が出ていないことが分かりました。
当初、このRailsアプリはHerokuにデプロイし、postgres add-onn を利用していましたが、レコードの上限数を超えたため、とりあえず無料で使えるElephant SQLへ乗り換えていました。
(この辺の話は以下に記載)
herokuのRailsアプリでDBをElephantSQLにしてみた - rochefort's blog
こいつが若干遅いということは分かっていたのですが、今はHerokuからVPSに移行しているので、今回ElephantSQLからDBの移行を行いました。
以下、本題。
DBの選択
PostgreSQLかMySQLサービスを使っても良いのですが、メモリ使うし、
まぁ、sqlite使って壊れても割と簡単にデータ復旧できるし問題ないだろうという判断でsqliteへの移行を行うことにしました。
ElephantSQLからのdump取得
これは簡単で、consoleからボタンひとつで取り出せます。
sqliteへの取り込み
ここが今回はまりました。
dumpはsql形式なので、ちょこっと編集すればsqliteに取り込むのも簡単だろうと思っていましたが、dumpはcopy句を使っていて、これが現在のsqliteでは使えません。
他にもPostgreSQLのdumpをsqliteに変換できるJava系のツールも公開されていたので試してみましたが、古いようで動きませんでした。
後は、csvに変換して取り込む方法ですが、NULLが空白になっちゃうし(アプリケーション的には問題ないけど、なんとなく嫌)、他の方法を思索したところ、 Rails6のMultiple Databaseの機能を使って移行できるのではないかという考えが思いつきました。
ご参考)
Active Record で複数のデータベース利用 - Railsガイド
やってみる
事前準備として、ElephantSQLのdumpを移行元PostgreSQLとしてimportしておきます。
また、移行先のsqliteも必要ですので、一時的にdatabase.ymlを変更し新しいDBを作って、rails db:migrate
しておきます。
multiple DB設定
config/database.yml
に移行先(sqlite)、移行元(PostgreSQL)の定義をしておきます。
development: # 移行先 primary: database: db/production.sqlite3 adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> # 移行元 primary_replica: adapter: postgresql encoding: unicode database: postgres-rails-app pool: 5 username: rochefort password:
ApplicationRecordに primary、primary_replicaのデータベースロール(writing, reading)を設定するだけ。
class ApplicationRecord < ActiveRecord::Base self.abstract_class = true connects_to database: { writing: :primary, reading: :primary_replica } end
移行
後はrails consoleで読み書きするだけです。
書き込みは、Rails6から利用できる insert_all
を活用。
def copy_table(klass) list = nil ActiveRecord::Base.connected_to(role: :reading) { list = klass.all } ActiveRecord::Base.connected_to(role: :writing) { klass.insert_all(list.map(&:attributes)) } end # example copy_table(Author)
感想
という感じで、サクッとできました。
当初考えていたdumpのsqlを手動で変更する手間もないですし、
csv経由でやるより簡単な印象です。
こんなことのためにMulti DB使ってるのは私ぐらいでしょうが、RailsのMulti DB自体は設定も簡単なので良いですね。