動かざることバグの如し

近づきたいよ 君の理想に

rails

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'

Railsの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…

Railsで表示する日付のフォーマットを変える

2019年2月15日追記 釘を差された RailsのTime::DATE_FORMATS[:default]は変更しないほうがいい - Qiita 要はデフォルトをいじるな、と。確かに「なるほど」以上の感想が出なかったので Time::DATE_FORMATS[:custom] = '%Y/%m/%d %A' Time.zone.now.to_s(:cus…