動かざることバグの如し

猫ゆえに。。。

rails

RailsでpumaのCPU使用率を取得する方法

環境 linuxでpumaで動作しているRails railsの負荷を計測するのは一筋縄ではいかず、一発でこうすれば取得できるってのはないのだが、なんとかして負荷度を計測したい。 ってときにtopコマンドでpumaのCPUの使用率を取得すると概算できることがわかったので…

Railsでルーティング一覧を生成してCSV出力する

環境 Rails 5以降 やりたいこと Railsは基本的には規則に沿ったルーティングになるが、規模が大きくなってくるといろいろ管理が辛くなってくる。今回ちょっと別のアプリにRailsのURL一覧を読み込ませる必要があったのだが、流石に手動で書くのはキツかったの…

Railsでrakeタスクから別のタスクを呼び出す

環境 Rails 5 やりたいこと Railsのtaskから別のタスクを実行したい。 方法 Railsのタスクはbundle exec rails xxx:xxxxのように実行するが、結局実態はただのrakeタスクなのでinvoke()を実行すれば良い namespace :sample do task hoge: :environment do |t…

rails db:migrateでALTER TABLEする時は気をつけろという話

結論 reversible do |direction| direction.up { execute "ALTER TABLE battles ADD PRIMARY KEY (id);" } end 環境 Rails 5.2 Ruby 2.4 なぜつけるのか railsのマイグレーションでindexつけたりとか特殊なことをしようとするときはexecute()を使うこともあ…

ActiveRecordのコネクションプーリングを完全に殺す

環境 Rails 5.2 MySQL コネクションプーリングとは 割愛 以下のサイトが詳しい Rails4.2のコネクションプールの実装を理解する - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.) やり方 database.ymlにreaping_frequency: nil を追加するだけ def…

RailsのModelを動的に生成してDBに接続する方法

環境 Rails 5.1 やりたいこと 普通、RailsのModelはapp/model以下に予め記述するが、特殊な例で動的に生成させたい場合 最初はメタプログラミングでいけるやろって思ったけど、 > mymodel = Class.new(ApplicationRecord) => #<Class:0x007f8e422a3668> (call '#<Class:0x007f8e422a3668>.connection' to esta</class:0x007f8e422a3668></class:0x007f8e422a3668>…

ActionMailerのメール送信ログを出力する

久々のRailsネタ 今回やりたいのはActionMailer経由でのメール送信時に送信先のログを吐きたい。 ActionMailerにはObserverというトリガー?的な機能があるのでそれにhookする感じで まずはログ出力先の設定 config/application.rbに追記 config.mail_logger…

Rails 5.2の新機能Credentialsでパスワード等を管理する

環境 Rails 5.2 要点 今までのsecrets.yml および rails secrets:xxxx方法は非推奨 今後は rails credentials:edit で秘匿情報の編集ができる 暗号化されたファイルはconfig/credentials.yml.enc 複合キーはconfig/master.key もちろん.gitignoreされている…

RailsでURL生成するときに必ずhttpsにしたい

Railsで posts_url みたいにヘルパーを使ってルーティングからURLを生成する際、デフォルトだとhttpsならhttpsで、httpならhttpのURLになるが、 明示的にhttpsにさせたい場合、 <%= link_to 'りんくだよ', posts_url(protocol: 'https') %> でいける。 どう…

巨大レコードのkaminariページネーションは工夫が必要

railsネタです kaminariが重い kaminariとは言わずと知れたRubyのページネーションライブラリ。Railsとの親和性が非常に高く、ソースコードをちょちょっと弄るだけで難しいページネーションが作れる。 が、ページネーション対象のデータの件数が多いと(10…

RailsのflashメッセージをBootstrapで表示したい

Bootstrapではalertというクラスが用意されている。 <div class="alert alert-primary" role="alert"> This is a primary alert—check it out! </div> <div class="alert alert-secondary" role="alert"> This is a secondary alert—check it out! </div> <div class="alert alert-success" role="alert"> This is a success alert—check it …</div>

Railsで明示的にクッキーを削除する

毎回忘れるのでメモ cookies.delete :my_key, domain: 'example.com'

Rails5のActionMailerでGmailからメール送信

環境 Rails 5 やること gmailのアカウント使ってSMTP経由でメール送信 もちろん無料 やらないこと ActiveJobによる非同期処理 Googleアカウント どうやらセキュリティ的に厳しくなったのか、Googleアカウントの2段階認証の設定をしていないと他人にメールが…

railsでpumaをkillできないときの対処

環境 rails 5 症状 pkill puma しても死ななかった これで死ぬはず pkill -9 puma が死なないだと??????? 結局以下で死んだ pkill -9 -f puma puma強すぎでしょ

Capistrano+Railsでassets:precompileが実行されない件

発端 普段はRailsのデプロイにcapistrano3を使ってるんだが、デプロイしてもCSSとJSが読み込まれずに404に。。 よく見るとassets/imagesに入れた画像も404に。ローカル環境だともちろん正しく表示される。でも、Capistranoのログをよく見ると、そもそもasset…

ActionCable使ったRailsのnginx設定

ActionCableはwebsocketを使うので通常のRailsと設定が違う。たくさんコケる要素があるのでそのメモをまとめた。 環境 Rails 5.0.3 puma Redisは今回使わない nginxの設定 upstream puma-realtime { server unix:///var/www/realtime/shared/tmp/sockets/pum…

Rails+pumaで強制再起動をする方法

Capistrano経由で操作する場合 一番楽ではある bundle exec cap production puma:start bundle exec cap production puma:stop bundle exec cap production puma:restart サーバーから操作する場合 すべて/var/www/html/myrails/currentのようにcurrentディ…

RailsでSHA-256ハッシュ値を生成する

irb(main):001:0> require 'digest/sha2' => true irb(main):002:0> Digest::SHA256.hexdigest "hogehoge" => "4c716d4cf211c7b7d2f3233c941771ad0507ea5bacf93b492766aa41ae9f720d" 書いてて思ったけど別にRailsじゃなくてもPure rubyでもいける あとrails…