-
RSpecを使用したオブジェクト割り当てのテスト
最近、誰もがRubyのパフォーマンスについて話し合っていますが、それには十分な理由があります。コードを少し調整するだけで、パフォーマンスを最大99.9%向上させることができます。 方法に関する記事はたくさんあります コードを最適化するためですが、コードが残っていることをどのように確認できますか 最適化されていますか? 定期的に呼び出されるメソッドにフリーズ定数ではなく文字列リテラルを埋め込む場合、必ずしも結果を考慮するとは限りません。将来コードを保守するときに、最適化の節約を失うのは簡単です。 HoneybadgerのRubygemで2回目(または3回目)にコードを最適化したときの最近の
-
gemのインストール中にrdocとriをグローバルに無効にする方法
宝石のインストールは遅くなる可能性があります。最大の原因の1つは、ドキュメントです。 gemをインストールするたびに、コンピューターはそのgemのソースをスキャンし、ドキュメントを生成する必要があります。 これは、オフラインのときにgemのドキュメントを頻繁に確認する必要がある場合に役立ちます。 gem serverを実行するだけです ブラウザでhttp:// localhost:8808にアクセスしてアクセスします。 riコマンドは、ターミナルからドキュメントを検索するのにも便利です。 しかし、あなたが私のようなら、おそらくローカルドキュメントを使用しないでしょう。あなたはおそらくほとん
-
Rubys Exception vs StandardError:違いは何ですか?
「Rubyで例外を救出しないでください!」 たぶんあなたはこれを前に聞いたことがあるでしょう。それは良いアドバイスですが、あなたがすでに知っているのでない限り、それはかなり混乱します。このステートメントを分解して、その意味を見てみましょう。 Rubyでは、次のような例外を救済できることをおそらくご存知でしょう: begin do_something() rescue => e puts e # e is an exception object containing info about the error. end また、エラーのクラス名を指定することで、特定のエラー
-
Rubyを介してシェルコマンドからstdoutとstderrをキャプチャする
tl; dr Rubyからシェルコマンドを実行し、そのstdout、stderr、およびreturnステータスをキャプチャする場合は、Open3.capture3を確認してください。 方法。 stdoutおよびstderrデータをストリーミング方式で処理する場合は、Open3.popen3を確認してください。 。 非常に多くの悪い選択 Rubyからシェルコマンドを実行する方法は文字通り492あり、それぞれの動作は少し異なります。以下のアプローチのいずれかを使用したに違いありません。私の頼りになるのはいつもバックティックです( ``)。 exec(echo hello world) # ex
-
Rubyのカスタム例外
Rubyで独自の例外を作成するのは簡単です。次の手順に従ってください: 1。新しいクラスを作成する 例外は、Rubyの他のすべてと同じように、クラスです。新しい種類の例外を作成するには、StandardErrorまたはその子の1つから継承するクラスを作成するだけです。 class MyError < StandardError end raise MyError 慣例により、新しい例外のクラス名は「エラー」で終わります。カスタム例外をモジュール内に配置することもお勧めします。つまり、最終的なエラークラスは次のようになります:ActiveRecord::RecordNotFound
-
Rubyの例外階層を理解する
例外はRubyの単なるクラスです。例外例外階層は、Exceptionから継承するすべてのクラスで構成されています。 これがRuby2.1の標準ライブラリの例外階層です。 Exception NoMemoryError ScriptError LoadError NotImplementedError SyntaxError SecurityError SignalException Interrupt StandardError -- default for rescue ArgumentError UncaughtTh
-
Pryでの例外の処理
あなたが私のようなら、あなたはRailsコンソールをよく使います。そして今では、PryがRailsコンソールに起こる最良のことであることに誰もが同意していると思います...まあ、これまで。 組み込みのこじ開けは、昔ながらのIRBに比べて、例外を除いて作業をはるかに簡単にするいくつかの非常に優れた機能です。 完全なバックトレースを表示 Pry(またはそのことについてはIRB)で例外が発生すると、バックトレースの短縮バージョンが表示されます。通常はこれで十分ですが、常にそうとは限りません。 pryでは、wtf -vコマンドを使用して、最新の例外の完全なバックトレースを確認できます。 -vフラ
-
環境変数へのRubyistsガイド
開発中および本番環境でWebアプリを効果的に管理できるようにするには、環境変数を理解する必要があります。 これは必ずしもそうではありませんでした。ほんの数年前、環境変数を使用してRailsアプリを構成している人はほとんどいませんでした。しかし、その後、Herokuが発生しました。 Herokuは、開発者に12要素のアプリアプローチを紹介しました。 12要素のアプリマニフェストでは、導入が簡単なアプリを作成するための多くのベストプラクティスを示しています。環境変数に関するセクションは特に影響力があります。 12ファクターのアプリは、構成を環境変数に格納します(多くの場合、env varsま
-
環境変数の保護
前回の記事「環境変数に関するRubyistのガイド」では、環境変数システムがどのように機能するかを示し、いくつかの一般的な神話を打ち破りました。しかし、ある有益な読者が指摘したように、セキュリティについてはあまり言及していませんでした。 秘密のAPIキーやその他の貴重な情報を保存するためにenvvarsを使用することが一般的になっているため、セキュリティへの影響を理解することが重要です。見てみましょう: 最悪のシナリオ ハッカーがrootとして、またはWebアプリケーションを所有するユーザーとしてサーバーにアクセスしたと想像してみてください。その場合、高度に暗号化されていない他のすべてのも
-
Rubyでのラムダの使用
ブロックはRubyの非常に重要な部分であり、ブロックなしで言語を想像するのは難しいです。しかし、ラムダ?ラムダが好きなのは誰ですか?あなたはそれを使わずに何年も行くことができます。まるで過ぎ去った時代の遺物のようです。 ...しかし、それは完全に真実ではありません。ラムダを少し調べてみると、ラムダにはいくつかの興味深いトリックがあります。 この記事では、ラムダの使用法の基本から始めて、さらに興味深い高度な使用法に移ります。したがって、ラムダを毎日使用していて、それらについてすべて知っている場合は、下にスクロールするだけです。 Lambdasについて覚えておくべき主なことは、それらが関数の
-
Derailedを使用して宝石のメモリ使用量をプロファイリングします
そのため、Railsアプリは大量のRAMを使用しています。ほかに何かあたらしいことは?しかし、おそらくこれは物事のやり方だけではありません。おそらく、アプリケーションのメモリフットプリントは、1つ以上の肥大化した宝石によって拡大されています。 私は最近、リチャード・シュニーマンによる非常にクールなプロジェクトに出くわしました。これは脱線と呼ばれ、自動ベンチマークツールのコレクションです。これがgithubリポジトリです。 あなたがする必要があるのは、次のようにそれをあなたのgemfileに追加することです: gem derailed, group: :development gem sta
-
Rubyでのビット単位のハック
通常、日常業務でビット単位の計算を行う必要はない可能性があります。 Rubyのビット単位のANDおよびOR演算子(&および|)は、意図的ではなく偶然に使用される可能性があります。誤って入力していないのは誰ですか? しかし、Cやアセンブラー、または私の場合はTurbo Pascalのような低レベルの言語をプログラミングして育った場合は、おそらく少なくとも少し手を加えたことがあるでしょう。 問題に対するビット単位の解決策はクールです。コンピューターが実行できる最も基本的な操作(2進数学)を使用して問題を解決できる場合、それ以上にエレガントになることはありません。 Rubyでのバイナリの操作
-
OpenStructがパフォーマンスを低下させる方法
私たちRubyistsは私たちのハッシュが大好きです。しかし、ハッシュにはいくつかのよく知られた欠陥があります。リチャードがHashieConsideredHarmfulで指摘したように、柔軟性が高すぎる場合があります。簡単なタイプミスで、意図していなかったキーを割り当てたり参照したりできます。 a = { type: F150 } a[:typo] # nil いくつかの一般的なハッシュの代替案 ハッシュを使用して実際の構造化データを格納している場合は、実際には柔軟性は必要ないと判断する可能性があります。それはあなたを困らせるだけだということ。 いくつかの選択肢があります。 XY座標の
-
Rubyを使用してRSSから電子メールへのダイジェストスクリプトを作成しましょう
このようなものが欲しい ニュースレターの設定は、あまりにも長い間私のやることリストに載っていました。今日はそれを実現する日です。サインアップをご希望の場合は、こちらからお申し込みいただけます。 ロングコピーのニュースレターはあまり好きではありません。私が好きなのは、興味深いコンテンツの厳選されたダイジェストです。 RubyWeeklyが気になります。 Wistiaのブログダイジェストもそうです。 これらのダイジェストを手動でまとめるには時間がかかりすぎます。しかし、フルオートになるのは非人格的すぎます。だから私が欲しいのは半自動化されたプロセスです。最新のブログ投稿を取得し、パーソナライ
-
高度なRubyハッシュ手法
Ruby開発者がハッシュを使用するのと同じくらい何かを使用する場合、それをすべて見たと考えるのは簡単です。 しかし、私はここにいるので、謙虚なルビーハッシュにはいくつかのトリックがあります。ばかげたKey-Valueシステムではなく、Hashオブジェクトを使用すると、非常に興味深く洗練された処理を実行できます。 任意のオブジェクトをハッシュキーにすることができます 先に進む前に、明らかではないかもしれないことを1つ指摘したいと思います。文字列や記号をハッシュキーとして使用する傾向がありますが、それは他の種類のオブジェクトも使用できないという意味ではありません。実際、ほとんどすべてのものをハ
-
`items.map(&:name)`を機能させる巧妙なハック
配列を反復処理するとき、私が何度も何度も使用していることに気付く速記が1つあります。これは&:トリック、別名「アンパサンドコロン」または「プレッツェルコロン」です。慣れていない場合は、次のように機能します。 words = [would, you, like, to, play, a, game?] # this... words.map &:length # ..is equivalent to this: words.map { |w| w.length } 最近まで、&:構文は演算子だと思っていました。しかし、そうではありません。これは、ActiveSupportで始まり
-
`top`と`ps`で示されるようにRubyスクリプトのプロセス名を変更する方法
LinuxまたはOSXでプログラムを実行するときはいつでも、プロセス内で実行されます。そして、すべてのプロセスには名前があります。名前は、ps、top、htopなどのコマンドを実行したときに表示される名前です。 htopは、右端の列にプロセス名を表示します。 デフォルトのプロセス名はサックできます デフォルトでは、プロセスの名前は、実行しているプログラムを含む実行可能ファイル名から派生します。これは、ほとんどの実行可能ファイルでうまく機能します。結局のところ、「less」を実行するときは、そのプロセス名を「less」にする必要があることは理にかなっています。 ただし、コマンドラインから
-
ラックアプリケーションで受信メールを処理する
クライアントから電話がありました... 彼は自分のアプリで受信メールを処理することを望んでいます 。 Basecampと同じように。 問題ありません。多くのサービスがPOSTでアプリにメールを送信します。簡単なはずです。でしょ? いいえ。 各サービスは独自の形式を使用します。 解析された電子メールを送信するものもあれば、生で送信するものもあります。認証署名を送信するものもあります。しない人もいます。 この部分をスキップして、標準の(よく知られている)ルビーオブジェクトを操作できたら素晴らしいと思いませんか? コードを書き直さずにベンダーを変更できたら素晴らしいと思いませんか? I
-
本番環境でRubyGems.orgを使用することに反対するケース
スクリード+独自の宝石をホストする方法を示すスクリーンキャスト これを邪魔にならないようにしましょう。gemは素晴らしいですし、RubyGems.orgは素晴らしいサービスです。 ...しかし、最近、アプリに新しい宝石を追加するたびに、気分が悪くなりました。考えれば考えるほど、宝石の使い方に欠陥があるだけではないようです。起こるのを待っている災害です。 ソーシャルエンジニアリングFTW 数日前のRubyNationで、BenSmithがHackingWithGemsという素晴らしい講演を行いました。 をハッキングしない 宝石ですが、ハッキングの方法として宝石を使用しています...攻撃ベ
-
RailsでのHotwireの使用
JavaScriptコードを記述せずに、ページの変更とフォームの送信を高速化し、複雑なページをコンポーネントに分割する方法を探している場合、この投稿はRailsをHotwireで次のレベルに引き上げるのに役立ちます。この記事では、サーバー側のレンダリングにツールを使用する方法を説明します。 Hotwireとは何ですか? Hotwireは、JSONの代わりにHTMLをネットワーク経由で送信することにより、JavaScriptを記述せずに最新のWebアプリケーションを構築する方法を提供します。これにより、ページの読み込みが速くなります。 Railsは、従来のシングルページアプリケーション(SP