rails で複数一意制約

複数一意制約とは

複数一意制約とは、複数のカラムでセットでユニークにすること。

たとえば、電話番号の連絡先リストを作るとき。 {name: “daisuke”, phone: 111 }が登録されていたとする。

  • {name: “daisuke”, phone; 111 } は登録させたくない
  • {name: “taro”, phone: 111} は登録させたい

つまり、電話番号だけは重複してもいいけど、名前と合わせて重複させたくない。

対応方法

class User < ActiveRecord::Base
   validates :name,:uniqueness => {:scope =>:phone }
end

でOK。

参考URL

http://yoshifumisato.jeez.jp/wordpress/post/rails/902 http://d.hatena.ne.jp/suginoy/20110507/p1

RubyでGoogle Analytics API をいじる

手順

  1. クライアントIDの作成
  2. 認証情報のDL&配置
  3. google-api-ruby-clientのインストール
  4. コード作成
  5. 実行

詳細

クライアントIDの作成

Google Developers Console から 新しいプロジェクトを作成。APIs&authのAPIsからAnalytics API をONにする。Credentialsから新しいクライアントIDを作成。

 認証情報のDL&配置

ここからDownload JSON で認証情報をDLする。DLしたファイルは実行ファイルと同じディレクトリに保存する。

google-api-ruby-clientのインストール

$ bundle init
$ vim Gemfile # gem 'google-api-client' を追加する
$ bundle install --path --path vendor/bundler

コード作成

こちらのコードをお借りしました。

# coding: utf-8

require 'pp'
require 'json'

require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'

# Initialize the client.
client = Google::APIClient.new(
  :application_name => 'deveropment test',
  :application_version => '0.0.1'
)

analytics = client.discovered_api('analytics', 'v3')

# ここでDLしたJSONを読み込んでいるので同じディレクトリにclient_secrets.jsonを置いておくこと
client_secrets = Google::APIClient::ClientSecrets.load

# Run installed application flow. Check the samples for a more
# complete example that saves the credentials between runs.
flow = Google::APIClient::InstalledAppFlow.new(
  :client_id => client_secrets.client_id,
  :client_secret => client_secrets.client_secret,
  :scope => ['https://www.googleapis.com/auth/analytics.readonly']
)
client.authorization = flow.authorize

# 各ページのPV数
result = client.execute(
  :api_method => analytics.data.ga.get,
  :parameters => {
    'ids' => 'ga:xxxxxx', # 自分のビューID
    'start-date' => 'YYYY-MM-DD',
    'end-date' => 'YYYY-MM-DD',
    'metrics' => 'ga:visitors,ga:visits,ga:pageviews',
    'dimensions' => 'ga:pagePath,ga:pageTitle',
    'sort' => '-ga:pageviews'
  }
)

# result.response.body
body = JSON.parse(result.response.body)
body['rows'].each do |row|
  pp row 
end

実行

$ bundle exec ruby Analytics.rb

実行すると認証画面が立ち上がるので許可をする。アナリティクスの情報が取れます。

ちょっと困ったこと

プロファイルIDは、ビューIDに変わっていた!! Google AnalyticsのプロファイルIDはビュー IDに変わっています。

参考URL

http://shoprev.hatenablog.com/entry/2013/07/21/193334
http://qiita.com/kazuph/items/2cf81a84985e894e9682
http://blog.naberon.jp/post/2013/08/25/google-analytics-api/
http://arayu.jp/google-profile-id.html

--no-rdoc --no-ri をデフォルトにした

毎回、手動でオプション書いてたけど、デフォにできるみたいなので、以下実施。

vim ~/.gemrc

で作成。以下記述。

install: --no-rdoc --no-ri
update: --no-rdoc --no-ri

参考URL

https://gist.github.com/maeharin/2717784

Rackについて調べてみた(1)

unicornはRackインターフェースに対応したHTTPサーバです」って書いてあったけど、 「Rackって何?」って感じなので調べてみた。大した内容じゃないですが。

Rackとは

以前は、動的なWebコンテンツを作る際には、CGIが使われていたそう。
しかし、

Webサーバー側で動作するプログラムがすべての処理を担当するため、多数のクライアントから処理要求が集中すると、どうしても処理が遅くなってしまいます。要求ごとにプログラムが起動されるため、サーバーの負荷が大きくなるのです。 http://www.grapecity.com/japan/powernews/column/web_app/009/page04.htm

とのこと。
そこで、CGIではなく、もっとフレームワークとWebサーバが深く連携するものが出てきた。

しかし、フレームワークとWebサーバ側が独自の仕様にすると、連携が片方に依存してしまう。
(例えば、このフレームワークを使うには、このサーバは使えないなど)

そこで、Rackが登場した。
Rackは、アプリケーションサーバフレームワークをつなぐインタフェイス。
Rackに対応しているサーバやフレームワークであれば、
組み合わせを自由に選べることになった。すごい!!

Rackを使ってみる

Rackは、Webアプリケーションに必要な最低限のインタフェイスを定めている。
ちなみに、Rackに対応したものをRackアプリケーションと呼ぶ。つまり、RailsもRackアプリケーション。

Rackのインタフェイスであるには、

  • callメソッドをもっていること
  • callメソッドは引数として、Webサーバからのリクエストを受けること
  • 返り値として、3つの要素(ステータス、ヘッダ、ボディ)をもつ配列を返すこと

である必要がある。逆に言えばこれだけ。
実例。

simpleapp.rb

class SimpleApp
  def call(env)
    p env
    case env['REQUEST_METHOD']
    when 'GET'
      [
        200,
        { 'Content-Type' => 'text/html' },
        ['<html><body><form method="POST"><input type="submit" value="見たい?" /></form></body></html>']
      ]
    when 'POST'
      [
        200,
        { 'Content-Type' => 'text/html' },
        ['<html><body>何見てんだよ</body></html>']
      ]
    end
  end
end

config.ru

require ‘./simpleapp'

run SimpleApp.new

以下で実行する

$ rackup

http://localhost:9292

で表示。

続きは、またこんど。

参考URL

http://gihyo.jp/dev/serial/01/ruby/0023 http://rack.rubyforge.org/doc/Rack.html

i386 とか、amd64 とか何をインストールすればいいのか。。。

CPUのアーキテクチャが、Intel x86 の場合、
つまり36bitの場合は、debianではi386をインストールするそう。

んで、CPUのアーキテクチャが、AMD64 & Intel 64の場合、
つまり、64bitの場合は、debianでは、amd64 をインストールするようだ。

とりあえず、VirtulBoxには、amd64 をインストールした。

でも、VirtulBox では、どちらもインストールできる。。
かつ、さくらのVPSでも両方インストールできる。。。
うーんなんだろ、これ。。。

学習7日目:apt など

aptについて

概要

Debian用のパッケージ管理システムである。

※パッケージとは
OSに何らかのソフトウェアを追加する場合、そのソフトウェアに関係するファイル一式をまとめた「パッケージ」を利用する

パッケージ同士の関係について

  • 依存
  • 推奨
  • 提案
  • 衝突

代表的なコマンド

apt-get upgrade

パッケージのアップデート

apt-get dist-upgrade

OS全体のアップグレード

apt-get install パッケージ名

パッケージのインストール

apt-get remove パッケージ名

パッケージの削除

apt-get clean

ダウンロードしたパッケージの削除

apt-get autoclean

ダウンロードしたパッケージの最新以外を削除

apt-cache gencaches

パッケージ情報の収集

apt-cache show パッケージ名

パッケージ情報の収集

apt-cache showpkg パッケージ名

パッケージの依存関係の表示

apt-cache search パッケージ名(の一部)

パッケージの検索

参考
aptとrpmコマンド