hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

Rails

DateとTimeの比較

たまたま、DateとTimeを意図せず比較している処理があったので調べてみた。 Date同士の比較であれば日付があっていれば 等しくなるので当たり前だけど Date.new(2023, 1, 1) == Date.new(2023, 1, 1) # true これが片方が Timeの場合 Date.new(2023, 1, 1) =…

パーフェクトRuby on Rails 【増補改訂版】を読んで

イントロ パーフェクト Ruby on Rails 【増補改訂版】を読みました。 Rails本の中では異質な量と質ではないかとおもいます。 誰が読むべきか 最近のRailsをキャッチアップしたい方 Railsをある程度は長く使っている方 よりRailsを理解したい方 Rails初心者の…

RSpec初心者向け勉強会の動画がとても良かった

イントロ RSpecの初心者向け勉強会が紹介されていました。 blog.jnito.com 勉強会の内容を動画で公開してくれています。 最近RSpecをあまり書いておらずトレンドも追えてなかったのでとても為になる内容でした。 気になった内容 テストの書くべきところ 動画…

fzfをつかってRailsのmigrationを実行しやすくする

イントロ Railsのmigationを実行する機会はそこまで多くはないと思うのですが、 generateしてつくったあとにVERSIONの選択が意外と面倒だったりします。 以前の記事 hotoolong.hatenablog.com でgit statusをfzfのpreviewやbindを使って操作しやすくしました…

RailsのRubyバージョンを2.7.0から2.7.1に上げる

いつものようにRailsのRubyバージョンを上げていこうかと思います。 まずはruby-buildの最新化します。 $ brew upgrade ruby-build rubyをrbenvで管理しているのでrbenvで2.7.1をビルドします。 $ rbenv install 2.7.1 Rails root の.ruby-version を 2.7.1 …

Railsのescape_javascriptの脆弱性対応を適応する

概要 Railsのバージョンが6.0.2.2に上がっています。 weblog.rubyonrails.org CVE-2020-5267 の脆弱性が含まれていました。 詳細はこちらを確認することでできます. github.com 適応 Rails6.0.2.1を使っていたため Gemfileを変更して 6.0.2.1を6.0.2.2に変更…

ソフト404をRailsで対応する

Search Consoleのエラーでソフト404が表示されることが度々あり、対応方法を考えてみました。 support.google.com 本来であれば、sitemap.xmlで送信しているURLから削除するなどの対応をすべきです。 ただ、検索ページなどで動的に変化する場合、 ページ内も…

orderで特定の文字列順に並び替える

数字順で昇順、降順で並び替えるのはよくありますが、 カラムに文字列を設定してしまっていると、並び替えたくなったときにすこし不便ですね。 そんなときにはfieldを使うとうまく並び替えれます。 select id, name from items order by field(items.size, '…

Railsのmigrationでchange_columnを利用する

change_column change_column_null change_column_comment change_column_default change_column Railsのmigrationでカラムの情報を変更したい場合によく使うchange_columnですが、 change_column(table_name, column_name, type, options = {}) と変更した…

ActiveRecordでOR文を作るときのエラー対処

少し複雑なSQLのOR文をActiveRecordで作るときにはすこし億劫になりますね。 ArgumentError: Relation passed to #or must be structurally compatible. Incompatible values: [:joins, :references] とエラーが出てしまったのでいろいろ調べてみました。 今…

CIでbundle install するときには --clean をつけると無駄にキャッシュされない

タイトルどおりなのですが、 目からウロコだったので、メモとして残しておきます。 Circle CI 2.0 でstore_cache、 restore_cache を使って、Bundler の gem をキャッシュしていたので、 とても参考になります。 ローカル環境でも --clean を付けてもいいの…

Capybaraでselect時に同じ名称のvalueがありエラーになってしまう

RSpecでCapybaraのテストをしてたのですが、 select '東京都', from: '都道府県' と記載している箇所で Capybara::Ambiguous: Ambiguous match, found 2 elements matching visible option "東京都" within #<Capybara::Node::Element tag="select" path="/html/body/div/div/div[3]/div[2]/div/div/form/div[8]/select"> のようなエラーが出てしまいました。 FactoryBot</capybara::node::element>…

rails server の 引数備忘録

気づけばもう3月ひな祭りですね。 デバックのため、ステージングのサーバを手で上げたくなったときに引数がわからなくなったので ほぼドキュメントなのですが、備忘録として残しておきます。 rbenv exec bundle exec rails s -e staging -p 8080 みたいにし…

Accept: */*; で MissingTemplateになってしまうのを防ぐ

topページヘのアクセスでたまに変なExceptionが出てたのです。 ActionView::MissingTemplate (Missing template pages/top, application/top with {:locale=>[:ja], :formats=>["*/*;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :c…

Rails4.2でlike句のサニタイズをする

2016年はじまってもう2月になってしまいました。 遅ればせながら、あけましておめでとうございます。 昨年から相当ハードなスケジュールでなかなかブログが書けてないですが、 今年はもう少し書く時間を確保したいところ。 頑張ります。。 今日のお題は SQL…

Railsバージョンアップメモ

4.2系も続けてバージョンアップされているので ココらへんでメモ やることは Gemfileのrailsバージョン変更 bundle update bundle install ./bin/rake rails:update テストを流してエラー箇所を修正 bundle updateはまとめて gemのバージョンを上げてしまう…

unicornに移行メモ

Apache → Passenger 環境 を unicorn に入れ替える Gemfileに gem 'unicorn' を追加 bundle installする bundle binstubs unicorn で unicorn、unicorn_rails を bin配下に作成 init.dに起動シェル作成しておいて ${RAILS_ROOT}/bin/unicorn_rails -c config…

each_sliceを使って簡易カレンダーを作成

仕事が忙しくなってきました。少し大変です。 少しのアイドルがある環境で過ごしたいなと贅沢なことを考えながら、 周りからモチベーションを落とされるというよくわからない状況を奮起しながら程良く頑張っています。さて本題です。 最近カレンダーを出力し…

大小比較でどちらかの値と取りたい場合のコーディングパターン

Ruby(Rails)で大小比較してどちらかの値と取りたい場合にどうやって書くのか という素朴な疑問なのですが、 最近私の中でのトレンドがありまして、 比較しながら検証していきたいと思うのです。 前提条件 例えば、日付型の2変数が用意されていて、小さい値を…

find_in_batchesとupdate_allで大量のレコードを分割処理する

最近はバックエンドの処理を捌く場合に、Railsを意識してるとなかなかパフォーマンスが出なかったのが、 find_in_batchesとupdate_allの組み合わせで意外とパフォーマンスが出たので、メモメモ。今回の件は、かなりデータ数が多くなりすぎて絞り込んでもLock…

ActiveRecord::Base#find_in_batchesを使ってみた

Railsでバッチ処理したい時に既存の ActiveRecord::Base#findを使いたいけど、処理件数が多くなりすぎるとメモリ食い過ぎて大変。 なんてことになりそうな場合は、今まではActiveRecord::Base#connectionで直接SQL文を実行してました。 ActiveRecord::Base#c…

Rubyでマルチバイト文字数を確認する

仕事でRuby1.8、Rails2.3とか使ってます。たとえば、30文字以上はカットとかバイト数でじゃない場合、 マルチバイトを文字数でカットしたいときにいいものを教えてもらったので、メモメモ ActiveSupportを利用 Railsの場合ですが、結構簡単にマルチバイト対…