タグ

Railsに関するrryuのブックマーク (70)

  • 環境変数を設定するだけでRuby on Railsサーバが10%高速化する(かもしれない)話 - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

    この記事は Akatsuki Advent Calendar 2019 1日目の記事です。 はじめに アカツキでは Ruby on Rails を使ったゲームサーバを開発・運用しています。ゲームの体験を向上するために、レスポンスタイムは一つの重要な要素となるため、種々のパフォーマンスチューニングを行なっています。今回はその一例として、環境変数を1つ設定するだけで、あるAPIのレスポンスタイムが10%も改善した例をご紹介します。 TL;DR 多数の時刻を含むレコードを扱う Ruby on Rails サーバでは、 TZ 環境変数を設定することで、デフォルトタイムゾーン設定ファイル /etc/localtime へのアクセスが減り、高速化が図れるかもしれません。 効果は Time オブジェクト1個あたり数μsの短縮といったオーダーですが、チリも積もれば山となり、数千個のレコードを処理するAPI

    環境変数を設定するだけでRuby on Railsサーバが10%高速化する(かもしれない)話 - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)
    rryu
    rryu 2019/12/02
    デフォルトのタイムゾーンを取得するために /etc/localtime のメタデータのロックを取り合うので、それが数によっては目に見えるほど効いてくるとは。
  • Railsアプリの処理を100倍以上に高速化して得られた知見 | PSYENCE:MEDIA

    はじめまして。2019年4月から妊娠・出産アプリ『Babyプラス』の開発チームにJOINした濱田です。 『Babyプラス』のバックエンドはRailsで実装されているのですが、とあるCSV生成処理がとても遅かったので100倍以上に高速化しました。この過程でRailsアプリの処理高速化に関する以下の知見が得られたので、具体例を交えて共有します。この知見は、ActiveRecordを使用してMySQLなどのRDBMSからデータ抽出をする様々な場面で活用できると思います。 いわゆる「N+1問題」を起こさないのは基 「ActiveRecordインスタンスの生成コスト」はそれなりに高い pluckはjoinsと組み合わせることで他テーブルのカラム値も取得できる 前提: DBスキーマとデータ規模 今回の処理高速化に関わるモデルのDBスキーマとデータ規模は以下の通りです。なお、これらはエントリ向けに少

    Railsアプリの処理を100倍以上に高速化して得られた知見 | PSYENCE:MEDIA
    rryu
    rryu 2019/08/05
    9000個のActiveRecordオブジェクトの生成を省くと1秒以上速くなる。CSV生成処理でそこまで追い込むかは微妙なところ。
  • Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?

    Rails Developers Meetup 2019(2019/03/22 - 23)

    Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?
    rryu
    rryu 2019/03/30
    Railsは何かの処理を共通化する仕組みはあっても、状況によって別の扱いをするという仕組みはないので、それをどうRailsに乗っけていくかで苦しくなっていく。
  • Railsアップグレード百景

    2019年3月22日にRails Developers Meetup 2019で登壇した際の発表資料です。

    Railsアップグレード百景
    rryu
    rryu 2019/03/23
    Rails2から5にアップデートした時は大変つらかった。消しても消しても新たに湧き上がってくるエラー…
  • Rails の CVE-2019-5418 は RCE (Remote code execution) です

    CVE-2019-5418_is_RCE.md RailsCVE-2019-5418 は RCE (Remote code execution) です 2019-03-23 更新 Remote Code Executionとして、Advisoryが更新された。 https://groups.google.com/d/msg/rubyonrails-security/zRNVOUhKHrg/GmmcVXcmAAAJ Thanks to @sorah @tenderlove 前置き これは休日に書いた記事で所属している組織とは一切の関係がない。 概要 CVE-2019-5418 は実際のところ高確率でRCEなのだが File Content Disclosure という聞き慣れない名前で公表されて、CVE-2019-5419 で DoSが出来るという内容になっている やあ、脆弱性の開示方

    Rails の CVE-2019-5418 は RCE (Remote code execution) です
    rryu
    rryu 2019/03/22
    この場合はCVE-2019-5420潜在的なRCEではなくしてCVE-2019-5418と合わせると大変まずいという説明を入れるべきだと思う。全体を把握している人がいないと難しいが…
  • Railsのcontrollerにおいて、メソッド外で初期化したインスタンス変数を参照すべきでない理由 - Qiita

    Railsのcontrollerにおいて、メソッド外で初期化したインスタンス変数を参照すべきでない理由RubyRails 背景 Ruby on Rails を利用した中規模以上のプロジェクトにおいて、 Fat な controller を解消するために、処理を分割することはしばしば行われます。例えば、サブメソッドへの一部処理の切り出し, before_action, concern への処理の委譲が行われます。しかし、処理を分割する際に、メソッド外で初期化したインスタンス変数を参照してしまうような例を時々見かけます。 このような実装は、一見DRYでシンプルに見えてしまうかもしれませんが、実際には開発効率の低下につながったり、バグの原因になる可能性が高くなります。 この記事では、メソッド外で初期化されたインスタンス変数を参照することの危険性と、それを避けた方が良い理由を考察してみたいと思いま

    Railsのcontrollerにおいて、メソッド外で初期化したインスタンス変数を参照すべきでない理由 - Qiita
    rryu
    rryu 2018/08/27
    コントローラが状態を持つと大体良くない感じになる。おおむねidパラメータを取るコントローラでbefore_actionでモデルを取ってくるみたいなのも自動で取ってくるから大丈夫と確認する労力の方が大きいと思う。
  • ActiveRecordのモデルが1つだとつらい - Qiita

    Railsあるある 何気ないモデルの変更がアプリケーション全体を傷つけた TL;DR 最近の趣味アプリではコントローラーごとにモデル生やしてトップレベルのモデル使わない設計で書いていて、コールバックやデフォルトスコープ書き散らかしても影響範囲がコントローラー内だけで済むので便利だしFormオブジェクト書いてグルーしまくる必要もなく快適 — Miyagi (@hanachin_) 2018年1月30日 アプリ全体で1モデルだとグローバル変数と一緒、モデル全体に影響でる機能がアプリ全体に影響でてつらい。機能ごとにスキップしたり使い分けはできるけどモデルごと全部分けたほうが楽、コントローラーごとに分けると責務が明確になりやすい。みたいな感じです! 詳しい記事はやる気でたら書く... — Miyagi (@hanachin_) 2018年2月9日 自分自身ネームスペースどう切るかとかは興味なくてd

    ActiveRecordのモデルが1つだとつらい - Qiita
    rryu
    rryu 2018/02/12
    これは結局コントローラに書いてることには変わりないので別のインターフェースから同じ処理を行おうとした時にコピペなどのつらみが発生するやつだ。
  • ReactSPAをRailsに戻している話 - Speaker Deck

    All slide content and descriptions are owned by their creators.

    ReactSPAをRailsに戻している話 - Speaker Deck
    rryu
    rryu 2017/05/01
    Railsみたいにサーバサイドで何でもやるみたいなやつにSPAを乗っけようとすると両者のあまりの合わなさに色々つらみがでるという…
  • Rails5 の落とし穴

    Rails 5 がリリースされましたね。いつものことですが、Rails のリリースノートは『新機能最高!!!』って見せながらサラッと落とし穴を用意してくるあたり、実に渋いなと思います。当にやめて欲しい。 大体 Upgrading from Rails 4.2 to Rails 5.0 な内容ではあるので、不正確な情報を頼りにするよりはできれば家の Rails Guide を当たるほうがオススメです。 ということで、発見した落とし穴を随時更新していこうかと思います。なお、移行元は Rails 4 を想定していますので、 Rails (バージョンを問わない)特有の落とし穴については各自やっていく気持ちで対処して下さい。 belongs_to に optional オプションが追加されました (ついでに required オプションが非推奨になりました) 一発目から戦争勃発という感じですが、

    rryu
    rryu 2016/07/04
    デフォルトの挙動を正反対にする勇気……
  • 1.5分赛车_赌场直营网_fun88官方地址-玉林市1.5分赛车网络科技公司欢迎您

    赌场直营网涂彩玛EMC体育官方成立于2008年02月05日,注册地位于赌场直营网28pc集团区上28大神专业版APP工业城三区霍达三路,法定代表人为费常华。经营范围包括快乐八全站登录五金塑料1.5分赛车、硅胶1.5分赛车、家庭用品。(依法须经批准的项目,经相关部门批准后方可开展经营活动)〓 公司名称:赌场直营网涂彩玛EMC体育官方 法人代表:费常华 注册地址:赌场直营网28pc集团区上28大神专业版APP工业城三区霍达三路 所属行业:橡胶和塑料1.5分赛车业 更多行业:日用塑料1.5分赛车制造,塑料1.5分赛车业,橡胶和塑料1.5分赛车业,制造业

    1.5分赛车_赌场直营网_fun88官方地址-玉林市1.5分赛车网络科技公司欢迎您
    rryu
    rryu 2015/11/05
    どんなものでもチュートリアルには「やらされている感」が出てしまうので、1回自力で作ってみてからが本当のプログラミングだと思う。
  • Phusion Passenger author here. See https://github.com/phusion/passenger/issues/1... | Hacker News

    Phusion Passenger author here. See https://github.com/phusion/passenger/issues/1286 for details.In short: Phusion Passenger sometimes spawns application processes (e.g. during startup). This spawning happens through bash. Some environment variables are set according to certain HTTP headers' values. We've been hoping the entire day that bash is going to be fixed "any time now", but the fix still is

    rryu
    rryu 2014/09/28
    PassengerLoadShellEnvvarsがOFFかログインシェルがbashでなければ大丈夫らしい。
  • ウェブアプリにおけるBash脆弱性の即死条件 #ShellShock - めもおきば

    条件1. /bin/shの実体がbashのディストリビューション RHEL CentOS Scientific Linux Fedora Amazon Linux openSUSE Arch Linux (自ら設定した場合: Debian, Ubuntu) 条件2. 動作環境 CGI (レンタルサーバでありがちなCGIモードのPHP等も含む) Passenger(Ruby) 条件3. プログラム内容 Passengerは全死亡 *1 systemや `command`、 '| /usr/lib/sendmail' などで外部コマンド実行 *2 PHPのmailやmb_send_mail、その他フレームワーク等を介したメール送信 *3 以下は条件1が不要 明示的にbashを呼ぶ 先頭で #!/bin/bash や #!/usr/bin/env bash しているプログラムを実行 (rbenv

    ウェブアプリにおけるBash脆弱性の即死条件 #ShellShock - めもおきば
    rryu
    rryu 2014/09/28
    PassengerLoadShellEnvvarsがONだとワーカーをシェル経由で起動するので即死ということらしい。そしてデフォルトはON……
  • (Railsで)プロフィール更新みたいなやつの注意点 - けんちゃんくんさんのWeb日記

    前職と現職で2アウト案件。 Railsに限らないけど、ログインユーザの情報を変更するときは current_user みたいな変数を変更するんじゃなくて、DBを引き直して更新しましょうって話。 ダメな例 class ProfileController def update if current_user.update(profile_params) redirect_to :root else render :edit end end end 良い例 class ProfileController def update @user = User.find(current_user) if @user.update(profile_params) redirect_to :root else render :edit end end end なんでだめなの? バリデーションエラーが起きた時に

    rryu
    rryu 2014/09/12
    これは編集画面全般に言えることで、編集対象の情報と入力値を別にしておかないと名前が必須のはずなのに入力エラー画面の見出しが「の編集」みたいになったり。
  • Railsが時代に合わなくなってきた - Qiita

    追記 RailsでJS辛い問題に関しての結論:http://qiita.com/kaiinui@github/items/dad6180f1910c6a4bfd5 -- 近年、(1) Web/App両対応が増えてきたこと、(2) WebでもJSを多用するようになったこと、の二つがあり、以下の点でRailsが微妙になっている。 ViewのJavascriptRailsから独立している API層のサポートが微妙 最初に書いておきますが、特に決定的な解決策もなく、辛いから今後解消されてほしいよね、な話です。 ViewのJavascriptRailsから独立している Railsはとても堅牢。 モデル、コントローラ、ルーティングと、変にいじらない限りはほとんどテストが要らない。 必要なのは、モデルに新たにpublicメソッドを付けたときくらいだろう。 実際、バックエンドはそうそうバグが出ない。

    Railsが時代に合わなくなってきた - Qiita
    rryu
    rryu 2014/06/27
    なんでもRubyで書けるようにして来たRailsのこと、そろそろRubyのコードからJSのコードを生成する何かが出て来て統合されるのではないかと思っている。
  • Rails ActriveRecordとSQLインジェクションと実際のアプリケーション

    (Last Updated On: 2018年8月13日)先日はActive RecordのSQLインジェクションパターンを紹介しました。今回は脆弱なコードを見つける事を試みようと思います。脆弱とは言っても攻撃可能であることは意味しません。コーディングとして脆弱であるという意味です。実際に攻撃可能であるかどうかまでは確認していません。 サンプルプログラム 実例ということでRailsアプリケーションが必要なので検索して、OpenProjectと呼ばれるRailsアプリケーションを利用しています。OpenProjectはOffice Projectのようなプロジェクト管理用のオープンソースWebアプリケーションです。GitHubでソースコードが公開されています。今回はそのコードを利用しています。 https://github.com/opf/openproject コードの確認 今回はActi

    Rails ActriveRecordとSQLインジェクションと実際のアプリケーション
    rryu
    rryu 2014/05/29
    ActiveRecordはincludeしたテーブルにエイリアスが付けられないからカラム名が被るときはテーブル名を指定せざるを得ないのが残念なところ。
  • Rails SessionにCookieStore使った時の問題点 - OAuth.jp

    今日 @mad_p さんからRT来てたこのツイートに関して、ちょっと調べたのでまとめときます。 Security Issue in Ruby on Rails Could Expose Cookies http://t.co/JlsXVEn4rZ — Ruby on Rails News (@RubyonRailsNews) September 25, 2013 前提条件 Railsではデフォルトでsessioncookieにのみ保存して、DBなりmemcacheなりのserver-side storageには何も保存しません。 これがCookieStoreとか呼ばれてるやつです。 この場合のsession cookieは、Railssession object (Hash object) をMarshal.dumpしてそれに署名を付けたtokenです。 rails 4では署名付ける代

    rryu
    rryu 2013/11/28
    セッションクッキーの有効期限とは別にアプリ側でセッションの有効期限の処理をしていないとリプレイ攻撃に弱くなるという感じ?
  • to_sとto_strの違いのメモ - kitak blog

    Object#to_sはオブジェクトの文字列表現. Kernel#printやKernel#putsは文字列以外のオブジェクトが引数に渡された場合にこのメソッドを使って文字列に変換する. to_strは暗黙の変換用. 暗黙の変換...? オブジェクトが「文字列が使われるすべての場面で代置可能であるような、文字列そのものとみなせるようなものという厳しいもの」とある. class Test def to_s 'to_s' end def to_str 'to_str' end end t = Test.new puts "#{t}" # "to_s" puts "123"+t # "123to_str" puts "to_strrrrr".include?(t) # 引数は"to_str"に変換される Matzいわく「Stringと類似のメソッド集合を持たないオブジェクトはto_strを定義す

    to_sとto_strの違いのメモ - kitak blog
    rryu
    rryu 2013/11/13
    ActiveSupport::SafeBufferのto_sがselfを返しto_strがStringを返すのは仕様ってことでいいのだろうか。
  • Railsライブラリ紹介: ページングを行う「kaminari」 | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 一覧画面に「<< | < | 1 | 2 | 3 .. 10 | 11 | 12 ... 98 | 99 | 100 | > | >>」のようなリンクが付いていることは多いですね。 ページング、ページネーション、ページャー、・・・などと呼び方は色々ありますが、ここでは「ページング」と呼ぶことにします。 今回はページングを実現するライブラリ kaminari をご紹介します。 kaminari (https://github.com/amatsuda/kaminari) kaminari の導入 Gemfile に以下の行を追加します。

    rryu
    rryu 2013/11/06
    Bootstrap用のテーマもあるので便利。
  • GitHub - activerecord-hackery/ransack: Object-based searching.

    Documentation There is extensive documentation on Ransack, which is a Docusaurus project and run as a GitHub Pages site. Issues tracker Before filing an issue, please read the Contributing Guide. File an issue if a bug is caused by Ransack, is new (has not already been reported), and can be reproduced from the information you provide. Please consider adding a branch with a failing spec describing

    GitHub - activerecord-hackery/ransack: Object-based searching.
    rryu
    rryu 2013/11/06
    ActiveRecoedのモデルの検索機能を作るためのモジュール。
  • ActiveSupport::Concern でハッピーなモジュールライフを送る | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 以前のエントリで「includeされた時にクラスメソッドとインスタンスメソッドを同時に追加する頻出パターン」をご紹介しました。 今回は、それに関する定形処理を肩代わりしてくれる ActiveSupport::Concern をご紹介します。 includeされた時にクラスメソッドとインスタンスメソッドを同時に追加するパターン Before 以前のエントリ(includeされた時にクラスメソッドとインスタンスメソッドを同時に追加する頻出パターン)でご紹介していますが、おさらいしましょう。 module M def self.included(base) base.extend(ClassMethods) end module ClassMethods def foo puts 'foo' end end def bar puts 'bar' end end

    rryu
    rryu 2013/11/01
    ActiveRecordを拡張するモジュールを作るときに便利なモジュール。