macOSでkey repeatが動かない時の対処法

実際はkeyrepeatは作動している。(例えば、$などはブラウザ上でキーリピートするし、Terminalでは問題なく動く)
この現象のときは、下記をターミナルを開いて打つ。

そして、再起動。

Railsで特定のバージョンのmigrationをロールバックする方法

git branchを行ったり来たりしていてしっかり管理しないとlocalでゴミテーブルができるのでしっかりdownさせる。

db:migrate:statusでマイグレーションの状態を確認。

最初の数列をコピペしてそのファイルだけ戻す。

その後必要ならSQLでmigrationエントリを消す

Sidekiqでdelayを使う。しかし、クラスメソッドを使いダイナミックなQueue名を使わない

DelayedJobと比べると使い方が少し違うので注意が必要。

Extentionを読み込むとdelayが使える

config/initializers/sidekq.rbに下記を追加(存在しない場合は作成)。これで毎回performを書かなくて良い。

これで、User.delay.my_methodが使える!

https://github.com/mperham/sidekiq/wiki/Delayed-extensions

インスタンスメソッドを使わない

インスタンスメソッドでも一見動いたので大丈夫かと思ったが実際運用してみるとだめだった。クラスメソッドでWrapして使いましょう。よく見ると太字でだめと書かれている。

I strongly recommend avoiding delaying methods on instances. This stores object state in Redis which can get out of date, causing stale data problems.

ランタイム時に動的なQueue名を指定しない

それ用のライブラリが別途あるのでそれを使用。スタティックなQueue使いにくい。。ユーザ毎にキューを用意したい。。

https://stackoverflow.com/questions/20133346/how-can-i-create-sidekiq-queues-with-variable-names-at-runtime

[LXD/LXC] lxd imageのexportとimport方法

LXDのversionは3.03

LXD export

作成してあるコンテナのイメージではなくて初期起動時にダウンロードしてくるOSイメージをexportするにはlxc launchで指定するイメージ名を引数にいれてexportする。

LXD import

version3.03ではtar.xzとsquashfsが作成されるのでこれを2つとも指定し、importする。aliasで名前をイメージ名を指定できる。:(コロン)は使えないので注意。

launchまでの速度比較

同じfingerprintのイメージをimageリストに持てないので、ubuntu16と18で比較してますが、、だいたい同じになると思います。

イメージダウンロード後にLaunch

約3分半。

importしてlaunch

52秒ぐらいで2分半は早く起動できることを確認!

RedashのLet’s encryptによるhttps化

Business IntelligenceのRedashはデータから経営判断するとても良いツールです。
SQLさえ書ければ、難しいプログラミング知識も必要のないのでテックに強いスタッフにSQLを勉強してもらえれば使ってもらえます。

AWSのAMIイメージも用意されてるのですぐに導入できます。しかし、TLS/SSL化されてないので大事なデータを傍受されてしまう危険性があります。
そこで、https化ですが、少し手間取ったので記録しておきます。

AMIを中身を見るとわかるのですが、DockerでRedash周りのプロセスが動いています。なので、方針として、ホスト側にlet’s encryptを入れる。Let’s encryptのキーがあるディレクトリをdockerからマウント。ホストでcertbotのリフレッシュで期限切れになるのを防ぐという感じです。

1. ホスト側にcertbot導入

方法はいろいろあると思いますが、AWSのRoute53を利用して作成しました。

参考:https://qiita.com/komazarari/items/88c1ed18765fb7cab6c1

https://certbot.eff.org/lets-encrypt/ubuntubionic-other通りにcertbotをインストールして、

pipでcertbot-dns-route53アドオンをインストール

AWSのsecretkey/apikeyをセットして、下記で/etc/letsencrypt以下にファイルを作成。systemd経由で期限切れの確認が走っているみたい。

2. Redash nginxのconfig作成

参考:https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e

redashのインストール場所に行って、ディレクトリとファイルを作成。

nginx.confは下記のようにした。

3. Redashのdocker composeファイルの編集

/opt/redash/docker-compose.ymlを開いて、

その後、リスタート。

systemdのpost-hook設定

直接certbot.serviceファイルを触るのはあまり良いプラクティスでなさそうだが、、

で開いて下記を追加(/usr/local/bin/certbotに変更。でないとバージョンのエラーで失敗していた)

sysytemdのコンフィグをリロードすればOK.

[Rails] Action Mailerのdelivery_methodを動的に切り替える方法

SendGridのAPI経由のEメール送信がテンプレートを使えて非常に良いので切り替えたいが、現在smtpで送っているメールをすべて一回で切り替えるのは不可能なので、同時運用したい。
下記のように、delivery_methoddelivery_method_optionsをmailメソッドに入れるとwrapしてくれるので、smtpを使わなくなる。

[Rails5.2] rails-ujsのdata-confirmをoverrideしてdialogをmodalに切り替える方法

以前のRailsはjquery-ujsを使っていたみたいで、rails-ujsでのdata-confirmダイアログの変更方法が見つからなかったのでjquery-ujsのoverride方法を参考にしながら、試行錯誤しつつdata-confirmmの挙動を変更しました。showConfirmDialog内をお好きなmodalモジュールに変更すれば動くはず。今回はUIKitを使っていたのでそれを使いました。

[Rails] sitemap_generatorのsitemap作成でAws::S3::Errors::AccessDenied: Access Denied

sitemap_generator gem

sitemap作成でハマったのでメモ。Herokuで動的なsitemapを作る一つの方法として、s3を使ったsitemap配信があります。ググれば、たくさんブログなどあるのですが、aws-sdkのバージョン2を使ったものがメイン。今回はaws sdk version3で構築してたのでAws::S3::Errors::AccessDenied: Access Deniedが出て時間を無駄に消費しました。

require 'aws-sdk-s3'が必要なのはissueを漁ればわかりました。

Aws::S3::Errors::AccessDenied: Access Deniedですが、s3のバケットをpublicにしていないと出ていました。なので、コンソールから下記を追加すればOK。

Rails経由でAWS Lambda(ruby)を使いファイルをs3にアップロードする方法

タイトルが渋滞していますが、、やったことは下記のこと。

  1. Railsが非同期ジョブ走らせる
  2. 非同期ジョブはlambdaをinvokeする
  3. lambdaがcurlでファイルを持ってきて、s3にアップロードする
  4. その結果のアップロード先URLをRailsのDBに保存

AWS Lambdaを触ったのは初めてです。nodeではなくrubyで動かします。まずは、AWS上にLambda関数を作ります。今回は、コードは短いだろうと予想し、ローカルにインストールせずにAWSのWEB UIのエディタを使いました。

Role 追加

登場ロールは2つ、Rails側でlambdaをinvokeするロールとlambda関数を走らせるロール

Rails側でlambdaをinvokeするロール

*全部必要ではないかもしれませんが、面倒なので全て権限をあげました。

lambda関数を走らせるロール

Rails側のコード

AWS Ruby SDK version2 です。RequestResponseだと同期で処理します。返り値を拾うためにもここは同期で処理。invoke_copy自体を非同期で走らせるイメージです。

Lambda関数のコード

AWS Ruby SDK version3です。Lambdaの/tmpのみがwritableな場所で、maxで512MBです。
したがって、これ以上コピーできません。

Scroll to top