サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
haracane.github.io
Rails / Elasticsearch この記事はRuby on Rails Advent Calendar 2016の17日目です。 RailsでElasticsearchといえばelasticsearch-railsですね。 今回はelasticsearch-railsとkaminariを合わせて使う時に押さえておいた方が良いことをまとめてみました。 ただ、基本的にはドキュメントにも書いてあることなのでちゃんとドキュメントを読んでおいた方が良いです。 検索結果をArelオブジェクトとして扱うと順番が変わる まず前準備として、これはドキュメントにも書いてあることなのですが records = User.search(sort: {id: :desc}).records records.class # => Elasticsearch::Model::Response::Records
Railsでactiverecord-importを使ってバルクインサートをする時にDeadlockエラーが出たので対処しました。バルクインサートをする時にはINSERT順を気をつけないといけませんねという話です。 MySQL / Rails / Ruby MySQLのBULK INSERTでエラー発生 ログ集計した結果をテーブルにBULK INSERTしていたら ActiveRecord::StatementInvalid: Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction: INSERT INTO `books` (`id`,`name`) VALUES ... というデッドロックエラーが発生しました。 BULK INSERTのエラー原因調査 ということでデッドロックの原因
Railsを運用しているとレスポンスタイムの監視は欠かせません。New Relicなどを使って監視している方が多いかと思いますが、今回はActive SupportのInstrumentation機能を使って10秒以上のレスポンスを通知するシンプルな方法をご紹介します。 Rails この記事はRuby on Rails Advent Calendar 2015の13日目です。 Active Support Instrumentationとは ざっくり言うと「Railsアプリケーションやフレームワーク内のアクションを計測するためのAPI」です。 この仕組みを使うと、コントローラのアクション実行やSQL実行などをフックすることができます。 今回はこのInstrumentationの仕組みを使ってレスポンス遅延の監視を行います。 アクションを監視する アクションを監視するには提供されているフック
RSpecでテストをする際にDatabaseCleanerを使うとテストケース毎にデータを削除してくれて非常に便利なのですが、transaction strategyで実行している場合にAUTOCOMMITされたデータが削除されず、その結果テストが失敗してしまう場合があります。今回はその対処方法をまとめてみました。 RSpec / Rails / Ruby この記事はRuby on Rails Advent Calendar 2015の3日目です。 DatabaseCleanerでテスト実行毎にデータを削除する RSpecでテストをする際に、各テストケースの実行毎にデータベースの状態をクリアしてくれるdatabase_cleanerというgemがあります。 このgemはとても便利で、rails_helper.rbに以下のような感じで設定しておくと他のテストの影響を受けずに各テストケースを実
ActiveRecordのUniquenessValidatorはネストしたパラメタ内の重複オブジェクトの一意性を検出してくれないので、カスタムバリデータを作って対応しました。 Rails / ActiveRecord UniquenessValidatorの問題 ActiveRecordのUniquenessValidatorはDBに保存済みのレコードと重複した場合はvalidationしてくれますが、 ネストしたパラメタで重複したオブジェクトを作ろうとしてもスルーしてしまいます。 例えば以下のパラメタが入力された場合にtag_idの重複をvalidationできません。 { "posts_attributes" => { "0" => { "post_tags_attributes" => { "0" => {"tag_id" => 1}, "1" => {"tag_id" => 1}
Capybara / RSpec / Rails / Ruby 連載: Rails4+RSpec+Capybaraでよく使うマッチャ&メソッド22個+α 「」第回の今回はページ内のリンクをhave_linkマッチャで確認します。 have_linkマッチャでリンク内容確認を行うには it { should have_link '江の島エンジニアBlog', href: '/' } のようにマッチャを使います。 リンクがないことを確認したい場合はshould_notを使います。 it { should_not have_link 'プロフィール' } リンクではないテキストがあることを確認したい場合はhave_contentと組み合わせて it { should have_content 'プロフィール' } it { should_not have_link 'プロフィール' } のように
OAuth2認証の定番Doorkeeper gemを使ってコンソールからアクセストークンを発行してみました。自前で認証画面を作る場合など参考になるかと思います。 Rails / Ruby / OAuth2.0 Doorkeeperを使うとデフォルトの認証画面を使うのが定番のようですが、自前で認証画面を用意したりRakeタスクでアクセストークンを発行したいことがあったりします。 ということで、Railsコンソールからアクセストークンの発行までやってみました。 Doorkeeper インストール まずはRailsプロジェクトのGemfileにDoorkeeper gemを追加してbundle installします。 # Gemfile gem 'doorkeeper' 今回はdoorkeeper-2.1.4が入りました。 続いてActiveRecord用の設定&テーブルを作成します。 $ ra
プルリクエストを基本とした開発スタイルの場合、Gitコマンドの使い方が開発効率にかなり影響します。今回はプルリクエストをうまく使うためのGitの使い方を6個紹介します。 Git 1. 最初は空コミット git commit --allow-emptyを実行すると空のコミットを作ることができます。 作業を始める時はまず空コミットでプルリクを作って、実装中のメモ書きをしたりしています。 なお、このプルリクにはWIP(Work in progress)ラベルをつけて作業中ということがわかるようにしています。 2. コミットメッセージにチケット番号を含める git commit -m 'TICKET-123 コミットメッセージ'のようにコミットの先頭にチケット番号を追加するようにしています。 これでチケット番号でプルリクを検索しやすくなりますし、次のプルリクエストメッセージ作成の自動化にも役に立ち
Gitコマンドはターミナルで最もよく使うコマンドなのでエイリアスやシェル関数にして実行しているのですが、実際に何をよく使っているか調べてみました。 Git この記事はGit Advent Calendar 2014の4日目です。 3日目は@sue738さんの「Githubのブラウザのみでブランチ切ってプルリクするまで」でした。おつかれさまでした。 今回はよく使うGitコマンドのランキングです。ちなみに、同じサブコマンドはまとめて集計しました。 ではさっそく結果発表です。 1位:とりあえずgs これはgit statusのエイリアスです。 alias gs='git status' 「何の作業してたっけな」という時にまず打ってみるコマンドなので、やっぱり利用頻度が高いですね。 ちなみに2位の3倍のダントツ1位でした。 2位:ga, gapでインデックス追加 それぞれgit addとgit a
ActiveRecordのデータをElasticsearchに放り込むのはとても簡単なので、Rails Consoleから実践してみます。 Elasticsearch / ActiveRecord / Rails / Ruby この記事はElasticsearch Advent Calendar 2014の3日目です。 2日目は@ariarijpさんの「入門記事:ElasticSearch1.4.0とKibana4.0.0の環境構築」でした。おつかれさまでした。 ではさっそくはじめましょう。 elasticsearch-rails Gemを追加する Rails Consoleを起動する前にまずGemfileに gem 'elasticsearch-model' gem 'elasticsearch-rails' を追加します。 bundle installでelasticsearch-ra
Railsで実際にFormオブジェクトを作ってみたらいくつか気をつけるポイントがあったので紹介します。 ActiveRecord / Rails / Ruby この記事はRuby on Rails Advent Calendar 2014の2日目です。 1日目は@miyukkiさんの「結局Ruby on RailsとPHPってどっちが優れてるの?」でした。おつかれさまでした。 Formオブジェクトとは Formオブジェクトはその名の通り入力フォーム用のオブジェクトです。 フォームとモデルがうまく対応しているときはActiveRecordをそのまま使えば良いのですが、 複数モデルを作りたかったりモデルとは違うValidationを行いたかったりする場合にはFormオブジェクトを使うと便利です。 Formオブジェクトのサンプルコードはこんな感じになります。 class Blog::SiteFo
elasticsearch-railsのソースを軽く読んでいたら、任意のリクエストを送れるperform_requestという便利メソッドがあったので紹介します。 Elasticsearch / Rails / Ruby Blog::PostがElasticsearch::Modelをincludeしているとして Blog::Post.__elasticsearch__.client.perform_request(:get, 'blog-posts/_count').body => {"count"=>2, "_shards"=>{"total"=>5, "successful"=>5, "failed"=>0}} という感じで任意のHTTPリクエストを送れます。 Awesome Printを使えば結果も見やすくなります。 ap Blog::Post.__elasticsearch__.
Rails / RSpec / Ruby 1. 階層を分けてモデルを作る まずはrails gコマンドでモデルを作ります。たいていの場合はお互いに関連のある複数のモデルを作ることになりますが、それらモデルは同じ階層の下に置くようにします。 例えば $ rails g model Blog::User name:string profile:text $ rails g model Blog::Post user:references permalink:string title:string content:text というようにモデルを作成します。 2. データベース制約を追加する Railsが生成するmigrationにはデータベース制約が設定されていないので、そのままではエンタープライズ用途には使えません。 基本的にNOT NULL制約とUNIQUE制約は必ず設定しますし、外部キーが
RSpec / Ruby もう1週間経ってしまいましたがRSpec3.1がリリースされたので勉強がてら主な新機能・変更点をまとめてみました。 なお、この記事はMyron Marstonの記事の要約になっています。 Backtraceフィルタの変更 RSpec3.0では表示していなかったgemの中のbacktraceをデフォルトで表示するようになっています。 非表示にする場合は以下を設定します。 RSpec.configure do |config| config.backtrace_exclusion_patterns << /gems/ end 特定のgemのbacktraceを非表示にすることもできます。 RSpec.configure do |config| config.filter_gems_from_backtrace "rack", "rake" end –exclude-p
Elasticsearch / Ruby / Rails この記事ではレシピ検索をする場合を例に検索機能を追加します. 検索機能を追加するモデルを作る まずは基本となるRecipeモデルを作成します $ rails new search_recipe $ cd search_recipe $ bundle install $ bundle exec rails g model recipe title:string description:text url:string $ bundle exec rake db:create $ bundle exec rake db:migrate $ bundle exec rails console > Recipe.create(title: "ミックス赤玉で豚玉を作ってみた", description: "業務スーパーで買ったのは卵(ミックス赤
このページを最初にブックマークしてみませんか?
『haracaneのブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く