[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です。
したがって、これ以上コピーできません。

[Linux] シンプルなプロセス監視にはimmortalが便利

プロセスがなにかの理由で死んだら、単純にリスタートさせたい。けど、systemdとかmonitとかの設定ファイルを書くのが面倒だなって思っていて調べていた。シェル(Bash)でLoopでかけそうだけど、

Ref: Stackoverflow

これも面倒だと思ってしまいました。スクリプトの前にone command置く感じでやりたいなって調べてみると、immortalというツールを発見!早速インストール。

使い方もシンプルで

付属のimmortalctlで、管理できる。

RailsでGoogle+シャットダウンに伴うGoogle Sign-in対応

[Action Required] Google+ APIs and OAuth requests are being shutdown on March 7, 2019というメールが来ていた。会社でGoogle Sign-Inを使っているので、影響があるかどうか調べて、変更を行った。

まずは、APIコンソールで確認。

Google+ APIをある程度の頻度で叩いてるので、変更が必要と認識。

Sign-Inに使用しているのGemは、omniauth-google-oauth2でgithub issueを探ると最新バージョンではGoogle+ dependencyはないとのこと。したがって、さっそくバージョンアップグレード。

Gemfile.lockを確認すると最新バージョンが入っていない。jwtのバージョンが古いことに起因しているようだ。

もうひとつサインインではないが、関係のありそうなgoogle-api-client(主にCalendar APIに利用)のバージョンを上げて、jwtが2.0以上になったことを確認。

もう一度、bundle update omniauth-google-oauth2で最新にするもうまくいってなさそうなので、Gemfileにバージョン指定。

bundle installして最新のもになってのを確認。

問題の切り分けに新しいプロジェクトをconsole APIに作り、tokenなどを作成し、テスト後、問題がなかったので本番環境にデプロイした。

数時間後、APIコンソールでgoogle+を叩いていないことを確認し、Google+シャットダウンに伴うGoogle Sign-inの対応完了。

所感:Googleに振り回れるがつらい。Hangoutも消えそうな気がするし。。

[AWS] EFSのマウント方法

EFSのルートを/etc/letsencryptをマウントする方法は、

1. パッケージのインストール (Ubuntuの場合)

2. 下記を/etc/fstabに記述する

3. セキュリティグループの作成

EFSサイドは2049 inboundをオープン。EC2側は2049のoutboundをオープン(outboundは基本全オープンだと思う)

4. 該当ディレクトリを作成し、fstabのReload

[Rails][JQuery]いつも忘れるDynamic select options

結構な頻度で書く依存型セレクトボックス。毎回自力で書いてるような気がするのでログしておく。

ruby/railsでEBS volumeを作る方法

AWS version3でebs volumeを作るのはドキュメント通り。

Scroll to top