-
いくつかのコールバックの落とし穴(そしてRails 5の修正)
ActiveRecordコールバックは、モデルのライフサイクルのさまざまな段階でコードを実行する簡単な方法です。 たとえば、Q&Aサイトがあり、すべての質問を検索できるようにしたいとします。質問に変更を加えるたびに、ElasticSearchのようなものでインデックスを作成する必要があります。インデックス作成には時間がかかり、緊急ではないため、Sidekiqを使用してバックグラウンドでインデックス作成を行います。 これは、after_saveを使用するのに最適な時期のようです。 コールバック! したがって、モデルでは、次のように記述します。 app / models / question
-
Railsセッションのしくみ
Railsアプリが、誰がアクセスしているかを認識できなかった場合はどうなりますか?同じ人が2つの異なるページを要求したことを知らなかった場合は?応答を返すとすぐに、保存したすべてのデータが消えた場合はどうなりますか? これは、ほとんど静的なサイトでは問題ないかもしれません。 ただし、ほとんどのアプリは一部を保存できる必要があります ユーザーに関するデータ。 多分それはユーザーID、または優先言語、あるいは彼らが常にあなたのサイトのデスクトップバージョンを彼らのiPadで見たいかどうかです。 セッション この種のデータを配置するのに最適な場所です。複数のリクエストに対して保持したい少量のデー
-
コード考古学で簡単な修正を超えて
バグ修正を行う場合、迅速で明白な変更が常に最良の変更であるとは限りません。そして、目の前のコードがすべてではありません。簡単な修正を超えるには、理由を知る必要があります。 特定の決定がなされました。 コードの背後にある歴史を理解する必要があります。 そして、自信を持ってコードを変更するために知っておくべきことを学ぶための3つの優れた方法があります。 git blame git blameの助けを借りて 、プロジェクト内のコードのすべての行のすべてのバージョンを、作成されたときまでさかのぼって追跡できます。 たとえば、ActiveJobのqueue_name.rbを見ているとします。 フ
-
キーワード引数、ハッシュ、およびスプラットを楽しむ
おそらく以前にこのパターンを見たことがあるでしょう。メソッドにはoptionsがあります 追加のパラメータを保持する最後の引数としてのハッシュ: def hello_message(name_parts = {}) first_name = name_parts.fetch(:first_name) last_name = name_parts.fetch(:last_name) Hello, #{first_name} #{last_name} end 残念ながら、ハッシュからこれらのパラメータを抽出する必要があります。そして、それはあなたが良い部分に到達する前に通り抜ける
-
本番環境でRubyのパフォーマンスの問題をデバッグする方法
あなたはパフォーマンスが特徴であることを知っています。また、開発中に多くのパフォーマンスの問題を見つけて修正することができます。 しかし、本番環境でのみ表示される速度低下についてはどうでしょうか? コードのすべての行にログメッセージを追加する必要がありますか?それは物事をさらに遅くするでしょう!それとも、何がうまくいくかを確認するために、「おそらくこれで修正される」という小さなコミットメントを大量に出荷しますか? 分析するためにコードを台無しにする必要はありません。代わりに、rbtraceを試してください -ing。 実行中のRubyアプリをトレースします rbtraceを使用すると、パ
-
ミニテストの失敗を即座に確認するためのショートカット
次の小さな機能をチェックインしようとしているので、完全な統合テストの実行を開始します。ドットが画面いっぱいになるまで、待って、待ってください… ......FF.... :-( テストの実行が終了するまで、まだ数分あります。ただし、テストの実行を早期に終了すると、わからない どのテストが失敗しましたか。 これらの失敗を確認する前に、実行全体が終了するのを本当に待つ必要がありますか? Ctrl-Tで救助します! Macを使用している場合は、テストの失敗を早期に確認する方法があります。 Ctrl-Tを押す テストの実行中。 実行すると、現在実行されているテストケースと、実
-
任意の順序でデータベースレコードを選択する方法
Railsでは、IDがあれば、データベースから大量のレコードを簡単に取得できます。 Person.where(id: [1, 2, 3]).map(&:id) => [1, 2, 3] しかし、レコードを別のに戻したい場合はどうでしょうか。 注文しますか? たぶんあなたの検索エンジンは最も関連性の高いIDを最初に返します。どのように維持しますか この順序であなたの記録? whereを試すことができます もう一度: Person.where(id: [2, 1, 3]).map(&:id) => [1, 2, 3] しかし、それはまったく機能しません。では
-
3つのクイックジェムトリック
最近、Rubyを更新し、いくつかのプロジェクトをアップグレードしました。そして、私がそうしている間に、私は以前は知らなかったいくつかのかなりクールなRubyGems機能を見つけました: 実行可能ファイルが古くなったとき 以前はrvmを使用していました Rubyのバージョンを管理します。 しかし、前回マシンをセットアップしたとき、それなしで試してみることにしました。 Bundlerを使用している場合はGemsetsは必要ありません。また、Homebrewを使用してRubyを最新の状態に保つことができます。 これは、Rubyを更新するまではうまく機能します。そしてrailsnew 、バンドル
-
どのくらいのテストが多すぎますか?
ひどくテストされたコードを扱うのがどれほど苦痛か知っています。バグを修正するたびに、さらに5つ作成します。そして、物事が 動作しますが、それがそのように設計されたのか、それとも偶然に動作したのかはわかりません。 一方、1つの小さな機能を出荷するために200のテストのように見えるものを書いただけです。 100%のテストカバレッジを達成するには、すでに機能しているコードを常に再設計する必要があります。最高のテストを行ったコードがどういうわけか少なくなっているという感覚を揺るがすことはできません。 読み取り可能。そして最悪の場合、アプリが燃え尽き始めています。 妥協点があるに違いありません。で
-
Railsアプリのパフォーマンスを理解するための新しい方法
Railsアプリは遅いですか? 単純なビューであるはずのものをロードするのに数秒かかる場合、掘り下げる価値のある問題があります。 データベース呼び出しが多すぎるか、メソッドが遅い可能性があります。あるいは、誰かがあなたのコードに入れて忘れてしまったスピードアップループかもしれません。 アプリの速度を低下させている原因を見つけるのに役立つツールがたくさんあります。数週間前、私はrbtraceについて話しました 。 NewRelicのrpm gemは、アプリの高速化にも役立ちました。 しかし、パフォーマンスの問題を調査するための私のお気に入りのツールは、さらに多くのことを行います。 箱か
-
ルビーの魔法を払いのけて宝石を理解する方法
Railsアプリを作成するときは、宝石の山を使用します。それらのいくつかは完全に魔法のようです!しかし、その魔法はどのように起こりますか? ほとんどの宝石では、あなたができなかったことは何もしていません。 これは単なるRubyコードです。 時々それは複雑 Rubyコード。しかし、そのコードを調べると、その魔法がどこから来ているのかが理解できるようになります。 ソースコードの検索 宝石がどのように機能するかを理解するには、そのコードを見つける必要があります。 詳細を知りたいメソッドがある場合は、ソースを見つける簡単な方法があります:method およびsource_location 。 以
-
学ぶべきレールがたくさんあるので、どこから始めますか?
Railsコンピテンシーチャートを見たことがありますか? CodeFellowsのBrookRiggioは、現代のRails開発者が知っておくべきすべての概念を示すためにそれをまとめました。ご覧ください: 恐ろしいですね。 あなたを攻撃する準備をしている200本の触手のモンスターのようです。 Railsを学ぶのが恐ろしいのも不思議ではありません。 SQLやDeploymentなどの一部のブランチは、キャリアパス全体である可能性があります。アプリケーションアーキテクチャに何年も費やしても、専門家のようには感じられない可能性があります。 しかし、それは正確です。 このグラフをプ
-
RubyAPIラッパーを構成する3つの方法
Rubyを使用してAPIをラップする場合、それを構成する方法が必要です。ラッパーにはユーザー名と秘密鍵が必要な場合もあれば、ホストだけが必要な場合もあります。 これを処理する方法はいくつかあります。では、どちらを選ぶべきですか? 簡単でグローバルな方法 あなたはあなたのサービスがいつものように振る舞うことを望むかもしれません。 アプリのどこにいても、すぐに使用できます。 それ以外の場合は、使用するすべての行に対して3行の構成に費やします! 定数またはクラス属性を使用して、構成をグローバルにすることができます: config / initializers / product_api.rb
-
Railsの基本を理解しました。それで、なぜあなたはとても遅いと感じるのですか?
Railsの背後にあるコアアイデアに自信があります。動作するコードを書くことができます、問題ありません。また、コードの品質、リファクタリング、優れたテストの作成、オブジェクト指向設計についてさらに学ぶことができます。 この時点で、あなたはそれを手に入れているように感じ始めています。あなたは専門家になる道を進んでいるのです。振り返ってみると、どこまで進んだかがわかり、進歩にかなり満足しています。 では、なぜそんなに遅いと感じるのですか? テスト、保守性、および設計に関心を持っているので、何かを出荷するのにはるかに時間がかかるように感じます! 可能ですか 高品質のコードを迅速に発送するには?
-
最高のBeginningRailsリソースへのガイド
Railsを学ぶための本、ビデオ、ポッドキャスト、コースがたくさんあります。 すべてを確認する時間はありません! では、初心者がRubyとRailsを学ぶための最良の方法は何でしょうか。どのリソースから、いつ開始する必要がありますか? 書籍とウェブサイト プログラミングにまったく慣れていない場合は、ChrisPineによるLearntoProgramから始めるのが最適です 。これは、知っておく必要のあるコアプログラミングのアイデアの紹介です。 RubyとRailsの学習を計画している場合は、すべての例でRubyを使用しているため、特に優れています。 その後、DanielKehoeのLear
-
Railsスコープをプリロードする方法
この記事は、Soonsang Hongのおかげで、韓国語でも利用できます! Railsのスコープを使用すると、必要なレコードを簡単に見つけることができます。 app / models / review.rb class Review < ActiveRecord::Base belongs_to :restaurant scope :positive, -> { where(rating > 3.0) } end irb(main):001:0> Restaurant.first.reviews.positive.count Restaurant
-
ActiveRecord列挙型を使用した簡単で読み取り可能な属性の作成
「保留中」、「承認済み」、または「フラグ付き」のいずれかの質問を想像してみてください。または、「自宅」、「オフィス」、「モバイル」、または「ファックス」の電話番号(1982年の場合)。 一部のモデルでは、この種のデータが必要です。 いくつかの異なる値のうちの1つのみを持つことができる属性。そして、その値のセットはほとんど変更されません。 これは、単純なRubyの場合、記号を使用するだけの状況です。 PhoneNumberTypeまたはQuestionStatusモデルとbelongs_toを作成できます これらの価値観を保持するための関係ですが、それだけの価値はないようです。それらをya
-
オープンソースに入る最も簡単な方法
この記事は韓国語でも利用できます。DohyungAhnのおかげです! Thom Parkinは、私の以前の記事のコメントで素晴らしい点を指摘しました: 素晴らしいアドバイス。しかし、あなたは1つの非常に重要な[最終]ポイントを逃しました。これはオープンソースであるため、ドキュメントが少し軽い機能の詳細を理解したら、ドキュメントを更新してプルリクエストを送信する必要があります。このようにして、コミュニティ全体が恩恵を受け、参加することで「コーダーの信用」を得ることができます! トムがこれについて言及してくれてうれしいです。とても重要だからです 。ドキュメントを修正することは、あなたが
-
Webサーバーとアプリケーションサーバー
Railsアプリのデプロイ方法を調べると、Apache、Unicorn、Puma、Phusion Passenger、Nginx、Rainbowsなどの多くの名前が表示されます。それらはすべてソフトウェアの「デプロイレール」カテゴリに当てはまるようですが、それらの間には重要な違いがあります。一部は「ウェブサーバー」であり、その他は「アプリサーバー」です。 どちらがどれで、各カテゴリがシステムのどこに当てはまるかを理解したら、導入の方がはるかに理にかなっています。 ただし、カテゴリは必ずしも明確ではありません。 ウェブサーバーとは何ですか。アプリサーバーとはどのように異なりますか。片方をもう
-
Ruby会議のビデオをあなた自身の個人的なポッドキャストに変える
Rubyカンファレンスは素晴らしいです。たくさんの知識を共有している人がたくさんいるので、ほとんどすべての話から何かを奪うことになります。 そして、あなたがそこにいられなくても、新しい会議はたくさんの新しいトークビデオを意味します。 しかし、問題があります。ビデオには時間がかかります。 1.5倍でも、それぞれ20分または30分持続します。そして、それは私が望むほど頻繁に見つけるのが難しい集中した時間です。 ポッドキャストは、しかし、私の人生の中ですでに場所を見つけました。私はほとんどすべての通勤を、曇りを発していくつかのエピソードを聞くことから始めます。通勤以外にも、犬の散歩をしながら聞