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 をいじる
手順
詳細
クライアント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
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
で表示。
続きは、またこんど。
参考URL
http://gihyo.jp/dev/serial/01/ruby/0023 http://rack.rubyforge.org/doc/Rack.html
学習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コマンド