ruby
エラートラッキングサービスの Sentry ですが、 一時的な通信エラーなど、Sidekiq で 1 回リトライすれば解決するようなエラーまで捕捉されると、通知が多くて厄介です。 そこで、リトライが起きたときだけ Sentry に送信されるようにしてみます。 まず、sen…
Ruby で Chrome を操作する gem Ferrum で、DOM 要素が表示されているかどうかを調べる方法です。 次のような visible? メソッドを作ります。 def visible?(selector) expr = <<~JS function(node) { return window.getComputedStyle(node).getPropertyValue…
slack-notifier で、URL がリンクになるのを防ぐ方法です。 payload の parse を none にしてあげます。 notifier = Slack::Notifier.new('WEBHOOK_URL') notifier.ping 'example.com', parse: 'none' 参考 api.slack.com
GitHub Actions で、Rails + PostgreSQL のシンプルなアプリをテストする方法です。 .ruby-version ファイルで、Ruby のバージョンを指定しているものとします。 2020年7月8日現在の情報です。 .github/workflows/ci.yml name: CI on: push jobs: test: runs…
ファイルアップロード gem の Shrine で、画像ファイル名が foo.php などでも foo.jpeg のように変換する方法です。 プラグインの設定だけで実現できて便利でした。 Shrine.plugin :determine_mime_type Shrine.plugin :infer_extension, force: true
Headless Chrome で簡単にスクレイピングできる Kimurai を Heroku で使用する方法です。 2019/11/4 現在の情報となります。 プロジェクトのディレクトリでコマンドを入力します。 heroku buildpacks:add heroku/ruby heroku buildpacks:add https://github.…
VCR 4.0.0 + RSpec 3.7.0 で確認しています。 spec/support/vcr.rb VCR.configure do |c| c.cassette_library_dir = 'spec/cassettes' c.hook_into :webmock c.configure_rspec_metadata! end spec vcr_options = { cassette_name: '...', match_requests_on…
昨日の続きで、CircleCI 2.0 を使い、毎日 bundle update を自動実行する設定例です。 circleci-bundle-update-pr という便利なツールを使用させてもらいます。 circleci-bundle-update-pr の README にも設定例は掲載されていますが、別の例ということで。 …
Kaminari v0.17.0 で確認しました。 ページングされすぎて、サーバに負担がかかる場合などに便利です。 config/initializers/kaminari.rb Kaminari.configure do |config| config.max_pages = 100 end これで、ページネーション用のリンクなどが 100 ページ…
MySQL で絵文字を扱うのに必要な utf8mb4 の設定方法です。 新規にデータベースを構築する場合向けです。 Rails 4.2.6 で確認しています。 データベースの設定 config/database.yml default: &default adapter: mysql2 encoding: utf8mb4 collation: utf8mb4…
Active Decorator の decorator 内で、ヘルパーのメソッドを使っていると、テストをうまく書けないという問題があります。 今までは、 active_decorator のdecoratorをrspecでテストする方法 - アジャイルSEを目指すブログ を参考にさせていただいていたので…
エラー監視サービス「Rollbar」の設定メモです。 同種のサービスと比べて、無料なのにサイト登録数が無制限というメリットがあります。 エラー発生数によって課金されますが、監視頻度を設定することで、課金を抑えることができます。 タイムゾーンの設定 プ…
転送量無料で 100GB あたり 450 円/月という ConoHa オブジェクトストレージ を CarrierWave から使う方法です。 公開設定にすることで、画像サーバとして使うことができます。 CarrierWave のバージョンは 0.10.0、fog のバージョンは 1.24.0 で確認してい…
試した Middleman のバージョンは 3.3.6 です。 プロジェクトディレクトリに config.ru を置く require 'rubygems' require 'middleman/rack' run Middleman.server Pow の設定 ln -s ~/middleman-project ~/.pow/middleman-project 基本的にはこれだけで良…
Sunspot で複雑な検索を行う場合、検索ブロックが長くなることがあります。 Post.search(include: [:author, :comments]) do # complex1 if complex_conditions1 with :blog_id, 1 else with(:published_at).less_than Time.now end # complex2 if complex_c…
2 つの文字列の類似度を計算する Trigram という gem を作りました。 https://github.com/milk1000cc/trigram Trigram.compare 'he is genius', 'he is genius' # => 1 Trigram.compare 'he is genius', 'he is very genius' # => 0.5625 Trigram.compare 'h…
HTTP リクエストをスタブ化する WebMock というライブラリがあります。 これは便利なのですが、リクエストの数が増えてくると、テストデータの管理が大変な場合があります。 VCR を使うと、自動でテストデータを作成してくれて便利です。 参考: VCRを使うとR…
img.example.com から配信 production 環境のみ という前提です。 CarrierWave のバージョンは 0.10.0 です。 Gemfile gem 'carrierwave' gem 'fog' gem 'dotenv-rails' config/initializers/carrierwave.rb CarrierWave.configure do |config| if Rails.env…
Devise (v3.2.2) で会員登録した後、ブラウザを閉じるとログアウト状態になってしまいます。 これを回避し、会員登録の直後から、常にログインしたままとする方法を考えてみました。 app/controllers/users/registrations_controller.rb class Users::Regist…
ActiveRecord の AR::Relation#order メソッドですが、チェインした場合の挙動が Rails4.0.0 で変更されていました。 追記(2013/11/7 18:00): Rails4.0.1 で、Rails3 の挙動に戻りましたので、この記事は Rails4.0.0 に対してのみ有用です。ご注意ください。…
Gemfile は、以下の通りです。koala gem は、Facebook を処理するライブラリです。 gem 'devise', '2.1.2' gem 'omniauth-facebook', '1.4.1' gem 'koala', '1.6.0' config/initializers/devise.rb の facebook 設定に、scope オプションを追加します。 ウォ…
まず、Qt と xvfb を入れます。 sudo aptitude install libqt4-dev xvfb Gemfile に、headless gem を追加します。 group :test do ... gem 'capybara' gem 'database_cleaner' gem 'launchy' gem 'capybara-webkit' gem 'headless' ... end spec/spec_helpe…
ImageMagick 系のエラーを表示しない 画像以外のファイルをアップロードされたらエラーを表示する 最大サイズを 5MB に制限 という場合です。content_type はこれでいいのか、ちょっと自信がありません。 has_attached_file :photo, whiny: false # whiny: f…
Sunspot (v1.3.0) で特定のモデルを再インデックスする場合、 rake "sunspot:solr:reindex[,Model]" としろと README に書いてあるのですけれど、これだと [,Model] の設定が無視されるようです。 rake "sunspot:reindex[,Model]" なら大丈夫です。 関連 URL…
~/.zshrc などに export PATH=./bin:$PATH を追記し、bundle install を binstubs オプション付きで実行。 最小限パターン % bundle install --binstubs rbenv を使っているとき % bundle install --binstubs --shebang ruby-local-exec rbenv 使用 + vendor…
Resque のプラグインで、Delayed::Job のように自動リトライをしてくれる resque-retry というものがあります。で、 Resque::Failure::MultipleWithRetrySuppression.classes = [Resque::Failure::Redis] Resque::Failure.backend = Resque::Failure::Multip…
acts_as_digested_on という gem を 3 年前に作ったのですが、Rails 3.1 から動かなくなっていたので修正しました。 モデルに 1 行追加するだけで、SHA1 ハッシュを自動でカラムに保存するというものです。 https://rubygems.org/gems/acts_as_digested_on h…
Addressable::URI を使うと、割ときれいに書ける気がします。忘れるのでメモ。 require 'addressable/uri' uri = Addressable::URI.parse('http://example.com').normalize uri.query_values = (uri.query_values or {}).merge('a' => '2') uri.to_s # => "h…
" 全 半 \n 混 在 ".gsub(/(\A(\s|\u3000)+)|((\s|\u3000)+\Z)/, '') # => "全 半 \n 混 在" 参考 Ruby【全角空白も除去】できるstrip!()ありますか? s = " 全.. - 人力検索はてな 解答例だと、途中に改行が含まれている場合の挙動が意図したものと違う
ActiveDecorator (v0.1.0) では、モデルのメソッド名とヘルパーのメソッド名が衝突した場合、モデルのメソッドが呼ばれるようです。 強制的にヘルパーのメソッドを呼び出したいときは、以下のようにすれば可能でした。 module HogeDecorator def my_truncate…