-
RubyでシンプルなWebSocketサーバーをゼロから構築する
最近、WebSocketはますます報道されています。彼らは「未来」だと聞いています。 Rails 5のActionCableのおかげで、これまで以上に使いやすくなっていると聞いています。しかし、WebSocketとは正確には何でしょうか。それらはどのように機能しますか? この投稿では、Rubyで単純なWebSocketサーバーを最初から構築することで、これらの質問に答えます。完了すると、ブラウザとサーバー間の双方向通信が実現します。 この投稿のコードは、学習演習として意図されています。実際の本番アプリにWebSocketを実装する場合は、優れたWebSocket-rubygemを確認して
-
AptWatcherの発表
Honeybadgerでは、apticronを使用して、すべてのサーバーのaptpackageアップデートを常に把握しています。最初は、apticronのメールが受信トレイに届きましたが、ある時点で、Slack通知チャネルにapticronのメールを送信することにしました。 Slackには、メールを受信してチャンネルに投稿できる便利なメールアプリがあるので、試してみました。動作しましたが、メールがファイルとして表示されるのが気に入らなかったし、メールヘッダーなどのノイズが多かったので、もう少し欲しいものを作り上げることにしました。このようにして、AptWatcherが誕生しました。 Ap
-
URI.joinが直感に反するのはなぜですか?
ここHoneybadgerでマイルストーンに到達しました。販売ページは、メインのRailsアプリの一部ではなくなりました。それは何年もの間私のウィッシュリストに載っていますが、必ずしも最優先事項ではありません。 この移行の一環として、URI.joinを使用していることに気付きました。 特定のリダイレクトリンクを構築します。しかし、私はすぐに問題に遭遇しました。 URI.join 期待どおりに動作していませんでした。 たくさんのパスフラグメントを取り、次のようにそれらをつなぎ合わせると期待していました: # This is what I was expecting. It didnt hap
-
DockerでSinatraアプリをAmazonsEC2ContainerServiceにデプロイする方法
告白の時間。私の開発環境は、Honeybadgerに取り組んできた4年間あまり変わっていません。しかし、その間、Honeybadgerは、機能する約10のサービスに応じて、はるかに洗練されたものになりました。 そのため、ローカル開発のためにDockerに移行しています。すべての開発者がPostgres、Cassandra、Memcachedなどをセットアップする代わりに、docker-composeを使用して事前に作成された環境を起動できます。素晴らしいです。 当然、Docker化されたアプリケーションをデプロイするのはどれほど簡単かと思い始めました。 Dockerを使用したデプロイ D
-
EC2でアプリケーションシークレットを管理する方法
アプリケーションをEC2にデプロイするときは、自動スケーリンググループを使用することをお勧めします。自動スケーリンググループを使用すると、手動で介入することなく、アプリケーションをスケールアップおよびスケールダウンして需要に対応したり、障害が発生したインスタンスから回復したりできます。ただし、それらを機能させるには、起動が終了した後、すべてのインスタンスがライブトラフィックを処理する準備が整っていることを確認してください。新しいサーバーで変更を加えたり、準備が整う前にcapistranoを介して初期デプロイを行ったりすることに慣れている場合は、アプリをサーバーにデプロイするよりも少し手間がかか
-
Big-O表記法のRubyistsガイド
私はコンピュータサイエンスの学位を持っていません。私たちの多くのRubyistはそうしません。そのため、長い間、big-O表記について学ぶことを避けていました。それは少し高等数学に似すぎています。つまり、O(N^2) 。来て。 代わりに、経験則を学びました: ハッシュで特定のアイテムを見つけるのは、配列よりも高速です ネストされたループを避ける ビューでリストを生成するときに、偶発的なDBクエリに注意してください これらのルールは優れていますが、なぜを理解していない限り それらは機能し、間違いを犯し、不可解なパフォーマンスの問題を抱えていることに気付くでしょう。 なぜそれが重要なの
-
Rubyカンファレンスがリーダーシップについて教えてくれること
Rubyの会議でRubyについて話されなくなったのはなぜですか? Rocky Mountain Ruby 2016の最近のスポンサーシップは、コミュニティの多様性の高まりを示しています。私たちが会議に送った人は貿易による開発者ではありません-そして私は一瞬、話の技術的な内容について心配しました。しかし、それらを見た後、最も経験豊富なRubyistでさえ、職場で成功するために非技術的なスキルを強調していることは明らかです。 あなたがこのシフトを嘆いている開発者であるならば、以下の話はあなたが考えていたものではないかもしれません。しかし、リーダーシップの機会に移行しようとしているのであれば、取
-
Rubyの例外に関する初心者向けガイド
先日、初心者向けに書かれたRuby例外の紹介を探していました。基本的なRuby構文は知っているが、例外とは何か、なぜそれが役立つのかよくわからない人です。見つからなかったので、自分で試してみることにしました。お役に立てば幸いです。紛らわしい点がありましたら、@StarrHorneまでお気軽にツイートしてください。 :) 例外とは何ですか? 例外は、予期しないイベントを処理するRubyの方法です。 コードにタイプミスをしたことがあり、プログラムがクラッシュしてSyntaxErrorのようなメッセージが表示された場合 またはNoMethodError 、その後、動作中の例外を見てきました。
-
データベースのパフォーマンスを低下させる一般的なRailsイディオム
RailsのActiveRecordを初めて見たときのことを覚えています。それは啓示でした。これは2005年にさかのぼり、PHPアプリのSQLクエリを手動でコーディングしていました。突然、データベースの使用は退屈な雑用から簡単になり、あえて言うと楽しいものになりました。 ...それから私はパフォーマンスの問題に気づき始めました。 ActiveRecord自体は遅くはありませんでした。実際に実行されているクエリに注意を払うのをやめました。そして、Rails CRUDアプリで使用される最も慣用的なデータベースクエリのいくつかは、デフォルトでは、より大きなデータセットへのスケールアップが非常
-
どの例外をキャッチするかを知るためのエレガントなトリックを救出します
以前にRubyの例外を処理したことがある場合は、どの例外をレスキューし、どの例外をレスキューしないかを指定できることをご存知でしょう。 begin raise ArgumentError rescue ArgumentError # Rescues the `ArgumentError` end ...そしてあなたはおそらくあなたが「親」を救うときあなたはその「子供」のすべても救うことを知っているでしょう。 begin raise ArgumentError rescue StandardError # Rescues `ArgumentError`, because
-
成長するにつれてデータベースのスケーリングを容易にするための簡単なヒント
若いプロジェクトに取り組んでいるときは、後で拡張するのが簡単または困難になるような意思決定を常に行っています。より速く出荷できるように、技術的負債を少し増やすために、短期的な利益を選ぶのが良い場合があります。しかし、別の方法があることを知らなかったために技術的負債を受け取ることもあります。 これは、ここHoneybadgerで、私たちの生活を必要以上に困難にするいくつかのことを行ったためです。いくつかの重要なポイントを理解していれば、スケーリングはそれほど苦痛ではなかったでしょう。 UUIDを使用する 「主キー」と言うとき、私たちのほとんどは自動インクリメント番号を思い浮かべます。これ
-
Sidekiqクラスタースクリプトの紹介
Honeybadgerでは、処理パイプラインをSidekiqに大きく依存しています。私たちが行うほとんどすべては、ある時点でキューを通過します。結果として、Sidekiqが正常に実行されていることを確認したいと思います。最近のEC2への移行により、長寿命のサーバーの安定したセットから、ジョブを実行するインスタンスの絶え間なく変化するセットに変更されました。これにより、起動時にSidekiqを起動する方法を再検討するようになりました。これは、以前よりもはるかに重要になっているためです。 以前は、すべてのワーカープロセスをスピンアップすることを神に依存していました。これは、ワーカープロセスを監視
-
RubysUnicodeサポートのテスト
Ruby 2.4に同梱されている新機能の中には、改善されたUnicodeサポートがあります。具体的には、upcaseのようなメソッド およびdowncase 「ä」を「Ä」に変えて、元に戻します。これは私に興味をそそられました:AndréArkoのブログ投稿を読んだ2013年以降、他にどのようなUnicodeの改善がなされましたか?Rubyの文字列はUTF-8になりました…そうですか?? 私はRubyのすべての文字列メソッドをテストしました。技術的なエラーではなく、「驚き最小の原則」の違反を探しました。具体的には、私の仮定は次のとおりでした: ユニークなキャラクターはユニークです: 「
-
Rubyハッシュキーとしてのオブジェクト
Ruby 3x3の取り組みをフォローしている場合は、おそらくOptcarrotについて聞いたことがあるでしょう。これは純粋なRubyで書かれたNESエミュレーターです。 私は最近、Optcarrotのソースを調べていましたが、興味深い詳細が1つ浮き彫りになりました。これは、見過ごされがちですが非常に便利なRubyのハッシュの機能を多用します。これは、任意のオブジェクトをハッシュキーとして使用する機能です。 コンテキスト:NESメモリマッピング 高レベルのプログラマーとして、私たちはメモリをRAMと考える傾向があります。しかし、下位レベルでは、「メモリ」には他にも多くの用途があります。
-
HoneybadgerGemv3の新機能
TLDR:箇条書きについては、CHANGELOGを確認してください。 最近、Rubyの例外を報告するために、gemの最新のメジャーアップデートを出荷しました。 v2releaseは、新しい構成戦略を含む完全な書き直しでしたが、v3には、重大な変更は少なく、機能と使いやすさの改善がたくさん含まれています。カバーすることがたくさんあるので、すぐに飛び込みます。お楽しみください! PlainolRubyモード Railsの世界では、gemをインストールすると、アプリケーションと自動的に統合されることがかなり期待されています。たとえば、多くのgemは、Railsの初期化時に独自のコードを実行す
-
RubyでのUnicode正規化
最近、Rubyの文字列メソッドのほとんどを特定のUnicode文字でテストして、予期しない動作が発生するかどうかを確認する記事を公開しました。それらの多くはそうしました。 この記事に対する批判の1つは、テストに正規化されていない文字列を使用していたことです。率直に言って、私はUnicodeの正規化について少し曖昧でした。多くのRubyistがいると思います。 正規化を使用すると、テストで予期しない動作をした多くのUnicode文字列を取得して、Rubyの文字列メソッドで適切に機能する文字列に変換できます。ただし: 変換は必ずしも完全ではありません。一部のUnicodeシーケンスでは、常に
-
メモ化のRubyistsガイド
今日は、パフォーマンスを向上させるための私のお気に入りのテクニックの1つについて話したいと思いました。これは、パフォーマンスを簡単に向上させるためのソースであり、最終的には合計され、アプリケーションがくすぶっている瓦礫の山にたまにしか減少しません。ごくまれに。 この手法は「メモ化」と呼ばれます。 10ドルのコンピュータサイエンスの言葉にもかかわらず、それは単に、メソッドを呼び出すたびに同じ作業を行う代わりに、戻り値を変数に保存して、代わりにそれを使用することを意味します。 擬似コードでは次のようになります。 def my_method @memo = <work> if
-
Rubyモジュールをネストするときは、これらのトラップを避けてください
モジュール(およびクラス)はネストすることを目的としています。 ActiveRecord::RecordNotFoundのようなコードフラグメント 非常に一般的であるため、それらについて二度と考えることはありません。しかし、Rubyのネスト実装(およびRailsの自動ロードシステム)には、コードが奇妙で素晴らしい方法で失敗する原因となる可能性のあるいくつかのトラップが埋め込まれています。この投稿では、これらのトラップの原因と、それらを回避する方法について説明します。 定数とは何ですか? この投稿はモジュールに関するものですが、モジュールを理解するには定数を理解する必要があります。ほとんどの言
-
Rubyプログラムを終了する方法
開発者として、私たちはプログラムの実行に多くの時間を費やしているため、プログラムがどのように終了するかを見落としがちです。そしてそれは重要です!プログラムが終了時に正しく動作すると、管理がはるかに簡単になり、標準のdevopsツールで動作する可能性が高くなります。 Rubyプログラムを終了する方法はたくさんあります。それらのいくつかを以下に示しました。この投稿では、これらのそれぞれの詳細と、それらを使用してアプリを行儀の良いUNIX市民にする方法について説明します。 # You can exit by calling a method exit exit! abort(She cannot
-
フリーズとフリーズを使用するのはいつですか? Rubyで
最近では、#freezeがよく見られます Rubyコードで使用されます。しかし、なぜフリーズが使用されているのかが完全には明らかではないことがよくあります。この投稿では、開発者が変数をフリーズする最も一般的な理由を見ていきます。それぞれの理由を説明するために、Railsコードベースおよびその他の一般的なオープンソースプロジェクトからサンプルコードを抜粋しました。 不変定数の作成 Rubyでは、定数は変更可能です。少し紛らわしいですが、コードは簡単に理解できます。ここでは、文字列定数を作成し、それに別の文字列を追加しています。 MY_CONSTANT = foo MY_CONSTANT <