FUMINORI.WORK

Webアプリ開発・スマホアプリ開発・UIデザイン・マーケティング

ubuntu + Apache で日本語の文字化けを解消する

ubuntuを英語環境で構築した場合は、日本語の言語パッケージをインストールします。*1

$sudo aptitude install language-pack-ja
$sudo dpkg-reconfigure locales

文字コードの設定ファイルを開く*2

vim /etc/apache2/conf-enabled/charset.conf 

AddDefaultCharset UTF-8コメントアウトを外す。

参考URL:

*1 Ubuntuの英語環境をCUIにて日本語対応にする | J-Linuxer

*2 ubuntu10.04での Apache2の設定|☆BACKSTREET☆

Rails4 でグラフを描いてみる ( Lazy_high_charts , Chartkick )

データベースに保存されたデータをグラフで綺麗に表示させたいなーと思ったので、調べたことやつまづいたことをまとめようと思います。

gemを探すにあたって、以下の記事を参考にしました。

Ruby on Rails で使えるグラフ・チャート用ライブラリまとめ | EasyRamble

さて、今回は Lazy_high_chartとChartkickの2つのGemを使ってみました。

Lazy_high_chartを使ってみた感想としては、 Good

  • ラベルなどの指定を結構細かくできる
  • グラフが綺麗(Highchartsのグラフのデザインが素敵)
  • グラフの種類が豊富で、結構細かな設定ができる

Bad

  • Capistranoでproduction環境にdeployした時に、Asset:precompileがフリーズした(地味にかなりハマる。javascript_include_tagで直接指定して対策)

次に、Chartkickを使った感想としては、

Good

  • シンプルで実装がとても簡単
  • google chart と highchartsのグラフどちらでも表示できる
  • library:{ ... }の中に、上記apiのオプションを指定することで、タイトルや軸の設定ができる

Bad

  • 線の種類が4種類に限定される。
  • 線グラフがスプラインに限定される

いずれも詳細設定は、Javascriptからおこなうことになりそうです。 今回、Lazy_high_chartとChartkickの2つを試してみましたが、 どちらもサクッとグラフを描くことができる素敵なGemでした!

Railsのパフォーマンスを上げるTIPS

最近ようやくRailsアプリのパフォーマンスを気にかけられるようになってきました。 ActiveRecordはとても便利ですが、レコードが増えてくるとどんどん重くなってきますので、設計の段階から対策をとっておきたいものです。 導入コストが少ない対策としては、 * SQLに索引をつける * N+1問題に気をつける * キャッシュを使う * 無駄なデータを引きすぎてる などがポイントなようです。

これからさらに勉強するために、参考になる記事をまとめてみました。

さいきんの Rails サービスを高速化をしてみた - 2nd life

[Rails 高速化] ページキャッシュ、N+1対策、SQLチューニング - 酒と泪とRubyとRailsと

Rils4で Russian Doll Caching を楽しむためのまとめ [俺の備忘録]

現実の世界の Rails、第 3 回: ActiveRecord を最適化する

勉強している間に参考になった記事があったら追加していきます。

Rails 4 と KoalaでFacebook Graph APIをつかう

Koalaを使ってFacebookイベントに参加した人の名前を取得してみます。

Gemfile

gem 'koala'
bundle install

FBのディベロッパーページから、アクセストークンをコピーする。

key = {ACCESS_TOKEN}
graph = Koala::Facebook::API.new(key)
fb_event_id = {FACEBOOK_EVENT_ID}
status = {RSVP_STATUS} #ここでは"attending"
attendee = graph.get_connections(fb_event_id, status, locale: "jp_JP")

これでattendeeに参加者の名前(日本語名)と、IDがハッシュ形式で取得されます。 ちなみにRSVP_STATUSは"attending"、"maybe"、"declined"、"noreply"がありますので、目的に合わせて使い分けます。

Rails + rbenv + Capistrano + EC2 + Apache + Passenger

EC2のデプロイで色々と手順が増えたので、まとめてみます。 (抜けているところは、後々追記していきます。)

  • EC2のセキュリティーグループを作成
  • EC2のインスタンスを作成
  • 公開キーを保存
  • 公開キーのパーミションを変更
  • EC2のElasticIPを作成
  • EC2のElasticIPとインスタンスを紐付け
  • ターミナルからEC2のサーバーにSSH接続
  • EC2のサーバーに下記をインストール
sudo yum install \
git make gcc-c++ patch \
libyaml-devel libffi-devel libicu-devel \
zlib-devel readline-devel \
mysql mysql-devel sqlite sqlite-devel
  • EC2のサーバーにrbenvをインストール
  • EC2のサーバーにrubyをインストール
    • 開発環境のバージョンと合わせること
  • EC2のサーバーにapacheをインストール
  • EC2のサーバーにpassengerをインストール
  • EC2のサーバーの公開キーを作成
  • EC2のサーバーに公開用Rootディレクトリを作成
    • sudo chown ec2-user myproject
    • sudo chgrp ec2-user myproject
  • Githubに公開キーを登録
  • Githubにリモートレポジトリを作成
  • GithubのリモートレポジトリにPush
  • 開発環境にcapistranoをインストール
  • Capfileを編集
    • rbenv_type は :systemか:userにすること
  • config/deploy.rbを編集
  • config/deploy/production.rbを編集
  • database.ymlを編集
    • productionの/db/production.sqlite3から/var/www/APP_NAME/db/production.sqlite3に変更

参考

Upgrade to Capistrano 3.0 - Qiita

EC2 (Amazon Linux) に Ruby on Rails + Passenger + Apache 環境を構築する | Developers.IO

【Rails4】参照キーが関連付けたテーブルに存在しない場合にレコードを取得する方法

タイトルが長いw

目的

has_manyで関連付けたテーブルに参照キーが存在しないときにレコードを取得すること。

Member.where.not(:id => Relationship.select(:member_id).map(&:member_id))

Relationshipテーブルに記録されたmember_idを配列にしています。