Web + Life Hack

〜True But Useless〜

rails

部分的にhttpsを付与する時に確認したいこと。〜view編〜

あれ?パスが更新されない?なんで?なんで?今回、「あるURL先からhttpだったURLをhttpsに変更する」という処理を追記する時にハマったのでメモ。 誤ったソース <% unless growth_hackers.blank? %> <%= link_to "growth_hackerに移動", growth_hacker_path…

めちゃめちゃ簡単なキャッシュ対策。それは「nilガード」

エンジニアの永遠の課題である速度改善。。。 そのためにサーバーを増やしたり、railsだとフラグメントキャッシュを 使ったりするかと思うのですが、 一番手っ取り早いキャッシュ対策がありました。 サンプルコード @GH ||= GrowthHack.last 意味は @GHがnil…

【rails】【開発】rails consoleでさくっとエビデンスを残す方法

rails consoleでデータを元に自分が書いたメソッドにバグが無いか 確かめたりは良くするのですが、 今回、その結果をエビデンス(結果をテキストファイルに出力)を取るという ことをしてみました。 (Rubyで出来るんだからrails consoleでも出来るんじゃ。…

【Rails】「paramsが扱えるのはシンボルだけ。」と思ってる方に見て欲しい内容

view側 <%= form_for([:front, @g08m11_profile], :url => confirm_for_join_front_user_url) do |f| %> <td class="info p15"> <p class="mb10"><span class="mr30"><%= f.date_select :birthday, :start_year => G08m11Profile::max_year_for_registration_birthday, :end_year =>1900, :prompt => true %></span></p></td>

【Rails】Railsのバグ?joinsを使ってハマるパターン

Railsで新しい検索条件(scopeなどでjoinsを使用)を追加した時にハマりました。 最近、ハマってしかない。。。。 前提条件 shopsテーブルには「company_id」が存在する。 companysテーブルには「shop_id」が存在する。 shop_profilesテーブルには「shop_id」…

【Ruby】【Rails】へっぽこエンジニアがfragment cacheでハマって解決するまでの紆余曲折まとめ

弊社で請け負った開発の納品前に 速度に問題があるということで 急遽、キャッシュを導入することになりました。 今回はRails4でキャッシュ導入で悪戦苦闘した一部始終をご覧ください。 前提条件: Ruby/Rails g08m11$ ruby -v ruby 2.0.0p247 (2013-06-27 re…

【rails】【ruby】ActiveRecordでcount(*)の結果をsortして上位をリストアップする方法をいけてないコードで書いてみた!

なかなかやったことがなかったので備忘録がてらにメモ。 (あまり良いコードではないのは重々承知なので、やり方として覚えるという意味で。。。) やりたかった事としては ActiveRecordでcount(*)の結果をsortして上位をリストアップ です。 今回は、今月中で…

【ruby】【rails】【API】じゃらんAPIでせこせこホテル情報を取得する方法

みんな大好きAPI! web系で働いて良くAPI、スクレイピングを利用するようになりました。 例を上げると ホットペッパーAPI http://webservice.recruit.co.jp/beauty/reference.html や 楽天の商品検索API http://webservice.rakuten.co.jp/api/itemsearch/ な…

【rails】素人に「アセットパイプライン」は危険だった。。。

現在、絶賛viewの実装を行っている最中です。 そこでアセットパイプラインを活用してみようと思い、 色々試してみました。 アセットパイプライン http://railsdoc.com/asset_pipeline なかなかメリットが多そう! railsの最新バージョンにもしてあるし、 試…

【rails4.0】【ruby2.0】link_toタグとimage_tagを一緒に使う

link_toタグとimage_tagを一緒につかいたいと思う機会がなかったというか、 今までviewを触る時はパーシャルやpathを書く事が多かったので この書き方を知りませんでした。 また、ググっても2008年といった古めの記事、 バージョン自体も古い(rails3.0系)記…

【ruby】【rails】先月分(月初め〜月末)を無理くり抽出する方法

今回はcreated_atを対象に先月分を抽出する方法を上げていきます。 ポイントは「無理くり」ということ。 もっとスマートなやり方があると思いますが取り急ぎ、期間内のデータが欲しい 方はぜひ、参考にして頂きたいです。 Model.where("created_at between ?…

【ruby】【rails】rubyで年齢を出力する方法

年齢を表示する時にやったことを書きたいと思います。単純にdate型、time型で合わせての引き算だと値がおかしいことになっていました。 2.0.0p247 :036 >g08m11.birthday.class => Time 2.0.0p247 :034 > (DateTime.now - 5.year) - DateTime.now => (-19720…

【rails】【Mac Ports】誰得?wgetやyumやbrewを使わないで「rmagick」を入れる方法

wgetなどのファイル取得ツールがたまたま手元になかったので macにデフォルトで入ってる「Mac Ports」を使って取得してみました。 PATH指定 export PATH=/opt/local/bin:/opt/local/sbin:$PATH export MANPATH=/opt/local/man:$MANPATHMacPorts自身とそのリ…

【rails】文字列を単数形や複数形にする方法

ある文字列の値を変えずに 単数形にしたり複数形にしたい場合に便利なrailsの関数を勉強しました。 文字列が単数形だった場合 2.0.0p247 :014 > t = 'test' => "test" 2.0.0p247 :016 > t.pluralize => "tests" 2.0.0p247 :017 > t.singularize => "test" 文…

【rails】【ruby】rails4では当たり前?今日学んだこと(Strong Parametersなど)

今日は主にこんなことを学んだ、学び直しました。 基本 config/routes.rbに :except => [:destroy]が書かれていたら 7つの基本アクションの中で不要なアクションを指定している (この場合は「destroy」)ことを表している。 rails3とrails4での差分 名称が変…

【rails】【ruby】これは覚えたい!異なる型同士を使ってDateTime型で比較する方法

日付(今回は予約可能日)と時刻(今回は予約可能時刻)が それぞれ異なる型の変数であり、 それをDateTime型の現在時刻で比較する方法を 纏めたいと思います。テーブル定義を変えるのは大変なので 覚えておくと便利かもです。 予約可能日: @g08m11.reserva…

【rails】postしたパラメータをDBへ登録する時に心がけたい書き方

現在、弊社では新規にrailsアプリを作っています。その際に実装したことを備忘録として残しておきたいと思います。やりたいこと: view側で渡したHash化されたパラメータを登録する →登録内容は「:name,:detail,:status,:start_at, :end_at」 g08m11_tasks.c…

【rails】【PostgreSQL】Mac OSXでPostgreSQLを使って出たエラーと対処法。

railsでpostgresqlを使った時(rake db:migrate)に以下のエラーが出ました。 WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.3rake aborted!could not connect to server: Too many levels of symbolic links Is…

【rails】【PostgreSQL】Mac OSXでPostgreSQLをHello worldしてみた。

現在、絶賛ハッカソン参加中なのですが、 デプロイ対象をHerokuにするかWindows Azureにしようか 迷っていました。どちらも一長一短あるのですが、 今後もサービス運用をしていくこと、 サーバーからの移行コスト(時間的、労力的なコストを重視)を踏まえて…

【rails】【view】int型に時間の「:」を付ける方法

DBのカラムはint型だが、それを「:」付きの時刻で表示して欲しいという 要望があった時に対応した内容を備忘録的に纏めたいと思います。 元データ g08m11.time =>900 対応した内容 g08m11.time.to_s.insert(-3, ":") =>9:00これだと わざわざgsub()やstrtim…

【Rails】image_submit_tagとsubmit_tagの違い

今日、view側の実装を行った時に勉強になったこと。今までsubmit_tagでパラメータを使う場合、当然view側の記述はこのようになる。 <%= submit_tag 'g08m11のブログ', :name => 'g08m11', 'data-role' => 'none' %> そして期待するパラメータはprams[:g08m11…

【rails】今日考えさせられたif文のこと

今日は改めてデータの持ち方について考えさせられたロジックがありました。仕様としては ある期限が現在より過去日であった場合、文言を非表示にする。 それ以外であれば文言を表示するという単純ものです。 その仕様に対し、私は最初、こんなロジックを書き…

【Rails】【Git】Railsルートディレクトリにあるおばけファイルたち!

一度投稿した記事ですが、ハロウィーンという事で再度、投稿しました。 お化けネタですし。。。 怪奇ファイル1 .gitignore 用途 Git用のファイルであり、git管理対象外を指定する際に使用します。メリット productionモードとdevelopmentモードで設定が違う…

【rails】【テスト】rspec内でseleniumをhello worldしてみた

自動化出来ることは自動化するのがエンジニアとしての腕の見せ所。そんな言葉が巷で聞こえてきたこともあり、 seleniumの導入を検討しています。 selenium https://code.google.com/p/selenium/wiki/RubyBindingsという訳でまずはHello worldをやってみまし…

【rails】【デバッグ】railsコンソールでモジュール内のクラスメソッドの呼び出し方法

今、実装しているクラスがモジュール内のため、railsコンソールの呼び出しが 通常と違ってたのでメモがてら残したいと思います。 ソース: module G08M11 class Test1Class def self.test1method return 222 end end end railsコンソールの呼び出し: rails …

【Rails】【Test】【比較】RspecをHello worldしてみた。

前回 【Rails】【Test】【比較】Test::UnitをHello worldしてみた。 http://g08m11.hateblo.jp/entry/2013/09/29/154033から引き続き、今回はRspecでやったことを書きたいと思います。 1・Rspec取得 gem install rspec 2・実行用のファイル(g08_m11.rb)作…

【Rails】【Test】【比較】Test::UnitをHello worldしてみた。

弊社ではスキルアップ向上のため、 「就業時間中に1時間程度をスキルアップに充てる」ということを 今月から試験的に実施しています。 業務の都合上毎日というのは難しいのですが意識的に業務効率を行い、 出来るだけ多く実施するようにしています。 (効果…

【Rails】【mysql】日時型のカラム(deleted_at)に「むりくり」nullを入れる方法

みなさんはRailsはMySQLといった組み合わせになっていますか?Railsはscopeにより生成されたSQLに対しては論理削除が行われていないかチェックするため deleted_at is nullを条件に追加し実行します。その際、MySQLのdeleted_atはデフォルト設定のままだとNU…

【rails】【リファクタリング】俺が出会った「これはあきませんやん。」

今月の頭からリファクタリングをしています。 現在はRails、Rubyに限ったリファクタリングではなく、 一般的な以下のリファクタリングを実行しています。 冗長的ロジックを抽出し、共通ロジックに変更 変数の移動 継承を委譲に置き換える ダウンキャストをカ…

【rails】【セミナー】 Ruby & Rails Biz Con2013に参加してきた。〜ビジネス編〜

今回もRuby & Rails Biz Con2013についての記事を。 前回は増井さんのセッションを元にこの様な記事を書きました。 【rails】【セミナー】 Ruby & Rails Biz Con2013に参加してきた。〜エンジニア編〜 http://g08m11.hateblo.jp/entry/2013/09/07/122424 今…

【rails】【セミナー】 Ruby & Rails Biz Con2013に参加してきた。〜エンジニア編〜

今回、就業時間中でありながら、無理言って、 初めて平日のセミナーに参加してきました。 Ruby & Rails Biz Con2013 http://www.boss-con.jp/rails/Ruby-RailsBizCon/全セッションではなく、3セッションの参加とはなったのですが。 (西村さんがモデレータ…

【rails】【Gemfile】足りなかったのは「s」だったという話。

今日、capstranoでデプロイをした時に以下の事象が発生しました。デプロイコマンド bundle exec cap app01 deploy 事象 ** [out :: app-01.g08m11.jp] Updating git://github.com/plataformatec/devise ** [out :: app-01.g08m11.jp] Updating git://github.…

【Rails】【小ネタ】最近知った、Railsの小ネタまとめ。

Rails関連で最近、僕が知っておいた方が良いと思った小ネタをまとめたいと思います。 1・修正内容の反映方法 僕はRails consoleを使う際、修正が発生するとRails consoleを落として また立ち上げてといった事をしていたのですが、 その手間がRails console…

【Ruby】【Rails】【js】Rubyのバージョンを上げたら見直したい箇所。それはView。

今回発見した衝撃の事実。Rubyのバージョンが2.0.0にした時点で なぜか動かない機能が出ました。 調査をしたところ 「.js」が付いていないソースが原因で動いていなかったのです。 どういうことかというと <%= javascript_include_tag "jquery_ujs","jquery.…

【Rails】【Git】身の毛もよだつRailsルートディレクトリにある怪奇ファイルたち!

みんながお盆を満喫し、すっかりfacebookがご飯や親しい友人の写真、 家族の写真で埋め尽くされている中、 せこせこpagenateの追加やviewの修正をしている僕です。 今回、お盆ということで少し怪談チックで。 怪奇ファイル1 .gitignore 用途 Git用のファイル…

【Rails】【MySQL】【テスト】限りなく生データに近いデータを使うためにやったこと

現在、テストを実施していますが、出来るだけテスト用のデータは作りたくないと思い、 定期的に作成している「dump」ファイルで一気に本番環境のデータを テスト環境のDBに入れています。 もちろん、本番環境であるためテスト環境のDBヘ挿入後は しかるべき…

【Rails】【デプロイ】【初心者】先輩に「やるな!」と思われるために確認したいこと

みなさんはどのような構成でデプロイを行っているでしょうか?現在、私が携わっているサービスはRailsを利用していることもあり、 CapstranoにてAWSのサーバー(インスタンス、VPC)にデプロイを行っています。その際に確認しておいた方が良いのでは? (デプロ…

【Ruby】【Rails】【資料】誰得?「RubyKaigi」に対抗してRails速度改善の資料を公開します。

今Rubyの祭典、RubyKaigiが開催中です。 RubyKaigi http://rubykaigi.org/2013 著名な方が参加し、多くの講演が行われ、多くのRubyエンジニアが思い思いの話をしながら深交を深めているツイートを見てると本当に楽しそう。 来年は参加出来るように会社に交渉…

【rails】【速度改善】viewのボトルネック特定の際に行ったシンプルな方法

先週から速度改善を行っています。 その際に行った方法は以下の通りです。 1・<div>タグ単位で以下のコードを入力(「_1」は都度、更新) <%#ボトルネック特定コード %> <%= start_time = Time.now%> ロジック <%= end_time = Time.now %> <%= logger.info("ボトル</div>…

【rails】最近覚えた「継承されたコントローラーのメソッドをskipするrailsのメソッド、『skip_before_filter』」

skip_before_filter :除外したいメソッド名 をコントローラー側で定義すると継承したいクラスで飛ばしたいメソッドを飛ばすことができます。 僕は継承したクラスに「ログイン認証メソッド」があり、それがCGIのレスポンス時に働き http ステータスコードの「…

【rails】日付型の整形について

ピンポイント過ぎてハマるかどうかは不明ですが、 ググる必要を省くため、備忘録的に残して置きたいと思います。 t = date.today date_year = t.strftime("%Y")

【rails】【CGI】たかがhttps、されどhttps。どはまりした内容をまとめました。

httpsでハマッたのでまとめみました。 黒の太字は個人的に重要だと感じた箇所です。 require 'uri' require 'net/http' def self.urlcheck hogehoges = hogehoge.where('created_at is not null') hogehoge = hogehoges[0] response = nil url = 'https://ho…

【rails】知って当たり前?bundle生成させずにrailsプロジェクトを作る方法

railsって本当に便利で、 「rails g scaffold プロジェクト名兼DBのテーブル名 テーブルカラム名:型 」 と簡単なコマンド一つでMVCモデルのプロジェクトが生成されて、 「rails s」だけで簡単にローカルサーバーを立ち上げ、一通りのフォームが出来ます。 し…

【rails】ここで詰まった!数字カラムを文字表示する時の注意点!

テーブルではデータ型がintgerだけど、それをそのまま数字で表示してもなんのこっちゃってこと、ありますよね。 例えば「有効/無効」のフラグ。 DBではフラグで登録するため、0または1で登録すれば良いですが、 表示させる際は、「有効/無効」にしなければ…

【rails】あなたは使ってる?migrationファイルが出来るワンライナー。

railsはテーブルの構築だけでなく、テーブルのカラムもマイグレーションファイルから行うことが出来ます。 その際に必要なコマンドは以下の通り。 rails g migration 'add_column_aaaa(カラム名)_to_table(テーブル名)' 知らなかった方、railsを勉強中の…

【rails】これは便利!「.find_by_sql()」でも「?」が使えてびびった話

railsを使いながらmysqlのデータを取得する機会というのはwebサービスで必要で、 単一のテーブルや単純な条件であれば「.where()」を使い、 指定の条件であればモジュールに引数にオブジェクトを渡し、 「?」を使用してその値を利用したりするかと思います。…

【Ruby】【rails】あなたは大丈夫?日付型の判定の違いについて。

突然ですが、railsで日付型の条件分岐を使用する際は何を使用していますか? 僕は意識せずに「DateTime.new()」を使用していました。 しかし、ソースRVでバグの温床であったことが判明しました。 結論から言うと、日本時間での日付比較は①Datetime.new()や②D…

【rails】最近覚えた似たものまとめ

1・.find()と.whereの違い Rails3ではActiveRecordのクラスメソッドの恩恵を受け、「.find()メソッド」、「.where()メソッド」が使えるのですが、これの違いは返し値です。「.find()メソッド」は単数を「.where()メソッド」は複数返します。 2・.blank?と.…

【rails】【再発防止】サービスダウンで泣く前にやるべき4つの予防策

先日、以下のような記事を書きました。 【rails】【再発防止】サービスダウンで全俺が泣いた。注意すべき3つのこと。 http://g08m11.hateblo.jp/entry/2013/02/06/011705 そこで今回は、問題事象に対する予防策について書きたいと思います。 1・検証環境の…

【rails】【mysql】文字化け(日本語が???になる)で泣く前にやるべき1つのこと。

railsにはマイグレーションという便利な機能があります。 これはmodelの作成やMVCに関するファイルを作成する際に使用するテーブルも作成出来る機能で、DBへSQLを直書きする必要がないため、大変便利です。 (rake db:migrateは忘れずに) http://www.rubyli…