タグ

Railsに関するdeeekiのブックマーク (350)

  • Railsプロジェクトの初期開発フェーズでのDBスキーマ管理を見直す | Webシステム開発/教育ソリューションのタイムインターメディア

    DBのスキーマ、皆様どのように管理されているでしょうか。 Railsを利用されている方の多くは、ActiveRecordのマイグレーションを利用して管理をされているかと思います。 私もいままでいくつかのRailsプロジェクトに関わってきましたが、 ほぼ全てのプロジェクトでActiveRecordのDBマイグレーションを利用してきました。 (一部のプロジェクトはActiveRecordを使っていないため、マイグレーションも独自のものを利用しています) ActiveRecordのマイグレーションでは、DBスキーマ変更の差分情報をマイグレーションスクリプトとして保存しておきます。例えば、新しいテーブル「users」を作成する場合は、下記のようなマイグレーションスクリプトを作成します。 class AddUsers < ActiveRecord::Migration def up # ここにマイグ

    Railsプロジェクトの初期開発フェーズでのDBスキーマ管理を見直す | Webシステム開発/教育ソリューションのタイムインターメディア
  • Capistranoによるデプロイの実行時にSlackに通知する方法

    2児の父、@artifactsauceです。愛の重さに潰されそうな毎日です。 Slack便利ですよね。ハウテレビジョンではSlack導入してから、あらゆるコミュニケーションを集約化しています。例えば弊社ではデプロイツールとしてCapistranoを使っており、Capistranoによるデプロイの実行時にSlackに通知が出されるようにしています。デプロイのタイミングはチームに共有されるべき情報の一つですね Capistranoにはデフォルトのデプロイ実行プロセス deploy が用意されていますが、これに従っているならば、いくらかの記述を加えるだけで、簡単にSlackへの通知ができるようになります。具体的には config/deploy.rb に、下記の記述を追記してください。<CHANGE_THIS>はご自分の環境に合わせて変更してください。ユーザー名やメッセージなどは任意に変更できます

    Capistranoによるデプロイの実行時にSlackに通知する方法
    deeeki
    deeeki 2014/10/21
  • routes.rbでresourcesを使ったときのパラメータをid以外にする - ぴよログ

    Railsではhas_manyな関連を持つモデルに対してRESTなルートを簡単に定義することができる。 # routes.rb resources :blogs, only: [:index] resources :posts, only: [:index] end このようなルートが定義される。 % rake routes Prefix Verb URI Pattern Controller#Action blog_posts GET /blogs/:blog_id/posts(.:format) posts#index blogs GET /blogs(.:format) blogs#index このときのパラメータである:blog_idにはデフォルトではBlogモデルのidが使われる。そしてこれらのルートに相当するURLは/blogs/1/postsなどとなる。 id以外のカラムをパ

    routes.rbでresourcesを使ったときのパラメータをid以外にする - ぴよログ
    deeeki
    deeeki 2014/10/19
  • ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita

    ActiveRecordでN+1クエリを潰すためにeager loadingを行う場合、preloadやincludesやeager_loadが役に立つ。 Preload, Eagerload, Includes and Joinsという記事にそれらの違いがよくまとめられているんだけど、includesが挙動を変える条件があまり正確に書かれていなくて自信が持てなかったし、そもそも記事が古いのでRails4.1.5のソースを読んで調べた。 せっかく調べたので、全体を通して日語でまとめてみようと思う。 User.joins(:posts).where(posts: { id: 1 }) # SELECT `users`.* FROM `users` INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id` WHERE `posts`.`id

    ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita
    deeeki
    deeeki 2014/10/11
  • Rails Jbuilderのあまり知られてないかもしれない?メソッド3選 | GMOメディア エンジニアブログ

    こんにちは山田コーダーです。先日Rails Jbuilderのコードを読んでみたら存在自体を知らなかったメソッドを3つ発見しましたので、今日はそれらを紹介したいと思います。 ■その1:merge! Jbuilderテンプレート内ではextract!メソッドを利用して、ActiveRecordオブジェクトのattributesを簡単に列挙することができます。 ※Scaffoldで自動生成されるJbuilderテンプレートも以下のような感じですね! json.extract! @item, :id, :name, :number, :public, :created_at, :updated_atでもこれ、カラム数が多いテーブル全体を表示したい時はちょっと面倒じゃないでしょうか?行が長くなってRuboCop等の規約チェックツールに怒られますし、カラムの追加・削除の度にテンプレートの修正が必要に

    deeeki
    deeeki 2014/10/11
  • 『パーフェクト Ruby on Rails』を読んだ - きにきじ

    『パーフェクト Ruby on Rails』(すがわらまさのり, 前島真一, 近藤宇智朗, 橋立友宏)を読みました。「Rails 開発に慣れてきたかな」くらいの人にちょうどいい内容だったと思います。それくらいレベルの人が少し上を目指したり、より Rails らしい設計や開発の仕方を学んだりするのにいい書籍だと思いました。Ruby 2 や Rails 4 向けの説明になっているので、新しめの情報を得たいような場合にもお薦めです。逆に、最新の RubyRails でバリバリ開発しているような人には既知のことばかりで物足りないんじゃないかなという印象です。 全体的に興味はあったのですが、購入の決め手となったのは第9章「より実践的なモデルの使い方」です。どう設計するか、どうリファクタリングするかの1つの指針として読んでみたいと思いました。実際に読んだ感想としては、学びも多く、読んでよかったと

    deeeki
    deeeki 2014/10/08
  • rspecとcapybaraでスクリーンショットを保存する | KonifarPod

    rspecとcapybaraを使って画面のスクリーンショットを保存してみました。これでレイアウト崩れや多言語対応漏れなどを簡単にチェックできるようになるはず。 capybaraとrspecについては、こちらに詳しくまとまっていますので、今回はスクリーンショットを取るための設定、それまでに出たエラーと対処方法を記載しておこうと思います。(rspecはすでに導入されている前提です) 1.gemの追加 Gemfile に以下を追加して bundle install します。 gem 'capybara' gem 'capybara-webkit' gem 'selenium-webdriver' 2.spec_helper に設定を追加 require 'capybara/rspec' ... RSpec.configure do |config| ... ActionController::B

    rspecとcapybaraでスクリーンショットを保存する | KonifarPod
    deeeki
    deeeki 2014/09/30
  • Rails 4 へのアップグレード時に遭遇した問題 - クックパッド開発者ブログ

    技術部の鈴木 (@eagletmt) です。 クックパッドでは8月に体アプリケーションや API サーバ等で使われている Rails のバージョンを 3.2 から 4.1 へ順次アップグレードを行いました。 アップグレードは主に松田さん (@amatsuda) と私で進めました。 この記事ではアップレードの際に遭遇した問題の一部を紹介します。 MySQL strict mode の有効化 MySQL を使っている場合、Rails 4.0 からデフォルトで @@SESSION.sql_mode = 'STRICT_ALL_TABLES' が最初に実行されるようになりました (Ruby on Rails 4.0 Release Notes) 。 これを無効化するために database.yml で strict: false という設定が用意されています。 しかし、同じく Rails 4.0

    Rails 4 へのアップグレード時に遭遇した問題 - クックパッド開発者ブログ
    deeeki
    deeeki 2014/09/30
  • (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 なんでだめなの? バリデーションエラーが起きた時に

    deeeki
    deeeki 2014/09/12
  • Rails の rescue_from で拾えない例外を exceptions_app で処理する - Qiita

    rescue_from で拾えない例外がある Rails が用意してくれている rescue_from は controller の外側で発生した例外を拾ってくれない。 例えばパラメータに不正なエンコーディングが含まれるときに、Rails は ActionController::BadRequest を例外として投げる。しかし、この処理は Rails の routing 層で行われているため rescue_from で捕捉することはできない。 そのため Rails の外で発生した例外を捕捉していない場合、ユーザには意図していないエラーページが見えている可能性がある。 Rails の外で起きる例外は exceptions_app で処理するのがお手軽 例えば config/initializers/exceptions_app.rb に以下のコードを書いておく(ErrorsControlle

    Rails の rescue_from で拾えない例外を exceptions_app で処理する - Qiita
    deeeki
    deeeki 2014/09/03
  • RailsでAPIをつくるときのエラー処理 - Qiita

    例外を利用して実装すると便利な場合が多い この投稿では、HTTP経由でJSONを返すようなWeb APIRailsを利用して実装するとき、エラーレスポンスを返す場合の処理をどう実装するとやりやすいのか、というニッチな話題に触れる。APIでエラーを返したいとき、即ち400以上のステータスコードと共にレスポンスを返したいような場合、どう実装するのが良いか。もしリクエストの処理中にエラーが検出された場合、それ以降の処理を行わずに直ちに中断してエラーレスポンスを返したいという場合が多いため、例外を利用して実装すると便利な場合が多い。 例外を利用しない方が良い場合もある 1つのリクエストに複数の問題が含まれている場合、先に見つけた問題だけを報告するようなエラーレスポンスを返すのか、それとも問題を抱えながらも進めるところまで処理を進めて報告可能な情報を全て含むようなエラーレスポンスを返すのか、という

    RailsでAPIをつくるときのエラー処理 - Qiita
    deeeki
    deeeki 2014/09/01
  • parallel_tests ではなく test-queue に乗り換えようと思う - Thanks Driven Life

    みなさま、もうすぐ今年の 2/3 が終わる今日この頃、いかが並列にお過ごしでしょうか。 私も快適に並列を生きていくために、今回 parallel_tests から test-queue に乗り換えようという気持ちになったということをご報告致します。 経緯 現在、PHP の Web アプリケーションを capybara + turnip でテストするお仕事をしており、 最近ようやく富豪な Docker ホスト環境に触れるようになったということもあって、 以前試した Selenium Grid + Docker でがりがり高速化に勤しんでいます。 そんなこんなで RSpec の同時並列実行もしないとね、ということで、以前から触っていた parallel_tests を導入しました。 これまでは全テストの完了まで 約40分 かかっていましたが、parallel_tests を導入するだけで 約1

    parallel_tests ではなく test-queue に乗り換えようと思う - Thanks Driven Life
  • クックパッドにおける最近のActiveRecord運用事情 - クックパッド開発者ブログ

    インフラストラクチャー部の成田(@mirakui)です。 Rails の OR マッパーである ActiveRecord ですが、みなさんどのように運用していますか? ActiveRecord を使うと、 SQL を直接扱うことなく、抽象化された表現で RDB にアクセスできるので、アプリケーションの開発効率という観点ではメリットが大きいです。 一方で、 ActiveRecord が駆使されているアプリケーションをサーバに配置してプロダクションとして運用する立場からすると、いくつかの問題に突き当たります。 まずはクックパッド体アプリケーションにおける、最新の rake stats をご覧ください。 +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC

    クックパッドにおける最近のActiveRecord運用事情 - クックパッド開発者ブログ
    deeeki
    deeeki 2014/08/28
  • Railsをバージョンアップし続けるために必要なこと - Qiita

    当は、RubyWorld Conf辺りでこういう内容も交えてなんか話せればいいなあと思ってたんだけど、CFPに落ちたのでQiitaにポエムを書いてみました。 Railsはそれなりに学習コストはかかりますが、慣れてくるとデフォルトで便利なものが揃ってるしサードパーティライブラリも豊富で、未だに最も便利なWebアプリケーションフレームワークの一つだと思います。 なので、最近のスタートアップ界隈ではRailsで開発をスタートする、という話をよく耳にします。(個人の感想です) しかし、Rails体に新しい要素をガンガン取り入れてくるので、バージョンアップのサイクルはかなり早く、それに追従していくのはそれなりに大変です。 Railsで開発をする場合には、一旦レールに乗ったらプロダクトが死ぬまで走り続ける覚悟が必要です。(時速60km以下になったら爆発する) それを最初に理解しておかないと、あっ

    Railsをバージョンアップし続けるために必要なこと - Qiita
    deeeki
    deeeki 2014/08/28
  • Rails + JavaScriptアプリを高速でデプロイする - ワザノバ | wazanova

    https://www.youtube.com/watch?v=QZVYP3cPcWQ 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約2時間前 DiscourseのJavaScriptが順次ES6モジュールのフォーマットにコンバートされてますが、Rovin Wardはその理由の一つとして、Railsのアセットパイプラインへの依存を解消し、ember-cliを利用するためであることを挙げています。 新しいリリースをするときのプロセスは、サーバ側のコードに変更がなければ、Railsアプリ全体をデプロイしなくて済むようになる。 とし、その参考としたのが、RailsConf 2014での、Yapp LabsのCo-founder & CTOであるLuke Meliaの講演のようです。 Railsをバックに、ホームペー

  • Railsでapp以下の変更をSpringが検知しない問題を解決した(?)

    最近またSpring を使い始めたんですが、相変わらずモデルやコントローラ を変更してもSpringは検知しませんよね?みんなどうしているんだろう? files in the app directory are not being watched · Issue #115 · rails/spring このIssueによると、そもそもRailsのリロードはコストが高いため、 Springはリロードが必要ない設計にしているそう。 うーん、、、とは言ったものの実際問題、モデルのメソッドを修正した後 テストを走らせても、変なエラーが出て、手動でリロードさせると直ると いうことが多々あります。 ちなみに手動リロードはtouch config/application.rbでイケます。thx! Springって touch config/application.rb でrestartさせるのか。htt

    deeeki
    deeeki 2014/07/07
  • Improve Rails performance by adding a few gems - Blog of Marian Posaceanu

    Working with Rails for some time you start nitpicking on how to improve it. This is a first in the series of articles regarding on how to improve (even marginally) Rails's performance. I'll focus on a bunch of gems that speed up, in some cases considerably, small parts of Rails, like the html escaping, the String#blank? and JSON utils. Benchmarking methodology Methodology is a strong word for just

    deeeki
    deeeki 2014/07/06
  • Building a tested, documented and versioned JSON API using Rails 4 - Emil Soman's blog

    Coder at Codemancers, Bangalore. GardenCityRubyConf organizer. Works with Ruby, JS, C++, AWS, Chef and Vim. Plays the guitar and sketches other times. Goals Use the leaner rails-api. This removes a lot of stuff Rails that you don't need for an API. This ensures that the API works for non-browser clients which do not support cookies. Also, there is no "View" layer that renders an HTML view for ever

  • Ruby on Rails and Android Authentication Part One | lucatironi.net

    Ruby (on Rails), Mobile Development, Android/iOS, Rubymotion, API development tutorials The Rails Web Application Intro In this two-three-part tutorial you’ll learn first how to build an authentication API that can allow external users to register, login and logout through JSON requests. After having successfully logged in, a user will receive an authentication token that could be used in followin

  • uu59のメモ | RailsとJS(vue.js)の連携

    前書き Railsを使いつつJSもそこそこ書きたい、という条件であればまず前提としてjQuery脳を捨てましょう。jQueryスタイルで考えるかぎり何をどうやっても破綻するのでJSを諦めるか保守性を諦めるかして覚悟を決めましょう。 捨てるのは「jQuery」ではなく「jQuery脳」です。jQueryでグローバルな領域に進出してメソッドチェインで狼藉を働いたり、いま現在目の前にあるHTMLだけを考えてDOM操作をしたり、$.onと$.triggerを使ったクロージャ内部へのGOTOなどを記憶から消しましょう。 可能な限りスコープを小さく保つのはプログラミングの基原則といえます。その原則を思い出し、JSを軽く扱わず、一般的なプログラミングと同様に閉じられた関心事にのみ注力するようにしましょう。 RailsとJSと役割分担 Railsもviewとしてテンプレートエンジンの処理を持っていますが