2014年3月29日土曜日

rails4 Turnipで受け入れテストを書く その2

環境

  • rails(ruby2.1.0, rails4.0.3)アプリ
  • mongoDB

前回の続きです。

top.featureを作成


touch top.feature

top_steps.rbファイルを作成


touch top_steps.rb

top.featureにシナリオを記載します


Feature: 追加ボタン

  Scenario: トップページにアクセスして追加ボタンを押下する
    Given サイトにアクセスする
    When トップページを表示する
    Then 画面にサイトトップと表示されていること

touch top_steps.rbを記載

# encoding: utf-8

step 'サイトにアクセスする' do
  # マスタカテゴリをinsert
  FactoryGirl.create :category0
  Capybara.app_host = "http://localhost:3000/"
end

step 'トップページを表示する' do
  visit '/'
end

step '画面にサイトトップと表示されていること' do
  expect(page).to have_content('サイトトップ')
end

bundle exec rspecで実行


Finished in 3.55 seconds
59 examples, 0 failures, 9 pending

問題ありませんね。上記のような形で試験をどんどん追加していきましょう。
使い始めたばかりなのでなんとも言えませんが、Cucumberより良いと思います。

しかし、他の開発の皆さんはseedsファイルに書いたマスタデータを、テストでどうやって利用しているでしょうか。全然いい方法が見つからないんですよねえ。困ったものです。
でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 Turnipで受け入れテストを書く その1

環境

  • rails(ruby2.1.0, rails4.0.3)アプリ
  • mongoDB

railsでソフトウェアを作成するとき、テストにRspecを使っています。
Cucumberも使おうと何回か考えたのですが、テストを記載するコストと釣り合わないなあと感じていて結局は使ったことがありませんでした。なによりDHHが批判しているので使う気が起きませんでした。参考
しかし、今のrails4時代には、Turnipという受け入れテストがメインに変わりつつあるようです。
Turnipの良い点は、Cucumberと異なりRSpecに一本化できることです。これにより管理がかなり楽になるようです。
ざっと見たところ、学習コストも良さそうなので、プロジェクトに導入してみようと思います。

そんなわけでTurnipをテストツールとして使ってみたので、そのメモです。アプリは完成している前提です。
あと、Cucumberの経験がまったくない場合は、Turnipを使うのはかなり厳しいので、以下の本を買って基礎だけは済ませておきましょう。

Turnip導入前には必ずgitなどでcommitしておきましょう。

Gemfile記述


group :test do
  gem "database_cleaner", ">= 0.9.1"
  gem "email_spec", ">= 1.4.0"
  # 以下を追加
  gem 'capybara'
  gem 'capybara-webkit'
  gem 'poltergeist'
  gem 'turnip'
end

bundle update


Command 'qmake -spec macx-g++ ' not available

Makefile not found

bundleに失敗。ここを見るとQtがないのが原因とのこと。

Qt導入


brew upgrade

brew install qt

結構時間がかかります。その後、再びbundle update。成功後、spec_helper.rbに以下を記載


# Turnip directory
Dir.glob("spec/steps/**/*steps.rb") { |f| load f, true }

# Turnip library
require 'capybara/dsl'
require 'capybara/rspec'
require 'capybara/webkit'
require 'capybara/poltergeist'
require 'rspec/rails'
require 'rspec/autorun'
require 'turnip'
require 'turnip/capybara'

.rspecに以下を追記


-r turnip

specフォルダ以下にfeaturesフォルダとstepsフォルダを作成


cd spec/
mkdir features
mkdir steps

featuresフォルダにhoge.featureファイルを作成


touch hoge.feature

viで開いてhoge.featureファイルに以下のテスト内容を記載。書き方はCucumberと同じ


Feature: 戦闘

  Scenario: 柔い敵と戦闘
    Given "スライム" が現れた!
    When 勇者の攻撃!
    Then モンスターを倒した

  Scenario: 固い敵と戦闘
    Given "はぐれメタル" が現れた!
    When 勇者の攻撃!
    Then モンスターを倒せなかった

bundle exec rspecで実行


    # No such step: '"はぐれメタル" が現れた!'
    # ./spec/features/hoge.feature:9
  戦闘 柔い敵と戦闘 "スライム" が現れた! -> 勇者の攻撃! -> モンスターを倒した
    # No such step: '"スライム" が現れた!'
    # ./spec/features/hoge.feature:4

    Finished in 3.87 seconds
    58 examples, 0 failures, 9 pending

テストで試験が通ったことを確認。次は、実際にtopページのfeatureファイルを記載していきます。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月28日金曜日

すぐに使えてガンガン集客! WEBマーケティング111の技 感想

WEBサイトを作成して集客する場合に知っておくべきことがまとめられた良書です。

サイトに人を集めるというのはエンジニア、プロデューサー、データサイエンティストといった人達が持つ能力とは異なる能力が求められますが、集客ノウハウも重要な技術の一つです。
もし、あなたがWEBサイトを作成して公開したら、次はこの本に載っていることを出来る範囲で試していくと良い結果が得やすくなると思います。

さて、今はWEBで情報を集める時代になっていて、本はどんどん売れなくなっています。
しかし、こういった選別された情報を凝縮した本は本当に便利です。

日本ではひと月にまったく本を読まないひとが5割くらいいるそうですが、読書というジャンルはもっともっと評価されていい分野です。

最近の私達はgoogle(検索エンジン)に依存しすぎて、あまり良質な情報が取得出来なくなっています。
人が興味を持つ情報が優先的に表示される世界というのは、情報が歪められたり規制される世界と同じくらい危ないというのを最近よく感じます。
人は信じたい情報をより信じる傾向にあるので、最近の検索エンジンの結果はかなり気持ち悪いです。(本気で新しい検索エンジンを作ろうかと考えたりするくらい)

私のブログもなるべく正しい情報を載せようとは心がけていますが、当然間違いもありますし、この書評のような個人の思索が混じってしまうケースも多々あります。

また、この本はWEBサイトの構築に携わる人間がどのように検索エンジンの表示順をあげたり、お客を呼びこんでいるかということを知るのにも役に立つでしょう。

何事にもルールや基本があるので、たとえちょっとしたHPでも作成した経験がある人も読んでみると良いかもしれません。
仕組みを知って、物事を見る視点が増えるとより豊かな人生が送れると思います。

良書です。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

部下を持ったら必ず読む 「任せ方」の教科書 「プレーイング・マネージャー」になってはいけない 感想

ライフネットの出口氏が書いた本です。
プレイヤーとマネージャーは求められる能力が違うと指摘し、マネージャーに必要な能力を説明しています。

以下が、マネージャーが心がけておくべきことのまとめです。

  • 一人で出来ることはたかがしれている
  • 管理は広く浅く管理しても、一人では10人くらいが限度
  • 権限の感覚をもつ
  • 任せるのが大事
  • 与えた権限の中で、部下にめいっぱい考えさせる
  • 明確で具体的な指示が大事
  • ルールを具体的にしておく
  • 期限と優先順位を決める
  • インプットの量を増やす。インプット量を増やすのは以下の方法
    • 人から学ぶ
    • 本から学ぶ(本は古典を読むと良い)
    • 旅から学ぶ
  • 各世代には、各世代にしかわからない価値観があるのでまかせる
  • 一番付加価値の高い所はアウトソースしてはいけない

上記の一番付加価値の高い所はアウトソースしてはいけないというのはよく聞く話で、apple,google,amazon,facebook等の世界的な企業でもコアな部分は数十人の腕利きのメンバーで担当しているというのは有名ですね。

それなりの人数が関わる規模の仕事をしている人は読んでおくといいでしょう。ただし、あくまで教科書的な考えなので、自分の環境に合わせてうまく取捨選択しましょう。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 リクエストの二重送信が発生

環境

  • rails(ruby2.1.0, rails4.0.3)
  • mongoDB

rail4で開発していたら、ajax更新時に処理が複数回(2-4)発生する事案が発生しました。
ログを調査すると、コントローラーのメドッドが何度も呼び出されているので、asset piplineのjsが何か悪さをしているのかと思ったのですが、原因はTurbolinksでした。

Turbolinksの機能にはfetchReplacementというのがあり、これが画面遷移時に色々と悪さをしていました。
解決方法は単純でTurbolinksの機能をoffにするだけです。

個人的な意見を言うと、あまりTurbolinksを使うのはお薦めできません。なんでこの機能が標準装備なんでしょうか...

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

HTMLテクニック from twitter

サイト構築でデザイン調査していたときのメモ

環境

  • HTML5

一般的なWEBアプリを作成するときによくあるのが、人物画像の横に投稿文章を配置するというデザインです。twitterとかfacebookが典型的ですね。

僕がいままでサイトを作成する時は、floatとclearを使ってデザインを構築していたのですが、twitterは違う方法でやっていたので以下にメモを残しておきます。(2014/3/28調査)

twitterの場合、画像以外のオブジェクト、つまり文章やリンクを、margin-leftで右横にずらして配置しています。
そして画像のclassにwidthとheightを指定して、ずらしたmargin-left内に収まるように画像を配置します。

このやり方の良いところは、とてもわかりやすいことです。
floatやclearでごちゃごちゃしないので、ソースが読みやすくなります。

実際に試したい人は、chromeのデバッガを使ってtwitterのソースコードをコピーしてみてください。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 Rspec ApplicationControllerのテスト

環境

  • rails(ruby2.1.0, rails4.0.3)

railsでApplicationControllerにauthenticate_user!のようなメソッドを用意して、ユーザーログインの有無を判定することがよくあります。
このような処理をrspecを使ってテストを行う場合、スタブを使う必要があります。

example


describe TestController do

  before(:each) do
    ApplicationController.any_instance.stub(:authenticate_user!).and_return(true)
  end

  // something

end

上記のように実装することで、authenticate_user!のメソッドでtrueを返すことができるようになります。
stubメソッドでメソッドスタブを作成し、and_returnでtrueを返すようにしています。

stubは便利な機能ですが、何でもかんでもstubにすると試験の意味がなるくなるので注意して使いましょう。


参考にした本

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月22日土曜日

rails4 Rspec Modelのメソッド引数にリクエストパラメーター

環境

  • rails(ruby2.1.0, rails4.0.3)
  • mongoDB

rspecでmodelのテストを行う時、メソッドの引数パラメーターにparamsをそのまま指定することがあると思います。例えば、以下のようなケースです。

test.rb(Model)


  # params is request parameter from controller
  def self.create_with_test(params, user_id)
    create! do |test|
      test.value = params[:test][:value]
      test.user_id = params[:test][:user_id]
      // something
    end
  end

上記のparamsはcontrollerから渡されたリクエストパラメーターです。こういった書き方でModelだけのテストする場合は、パラメーター(params)をrspec側で作成してしてやらないといけません。
やり方は、Hashを使用することになります。以下、サンプルです

test_spec.rb(Model)


        user = FactoryGirl.create :test_user1
        // dummy test request parameter
        params = {:test => {
                      :value => 'my name is jone',
                      :user_id => '1q2w3e4r5t6y'
                  },
                  :name => 'ssssss'
                 }
        user_id = user.id
        Test.create_with_test(params, user_id)

上記のようにすることで、リクエストパラメーター作成してテストを通すことができます。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月21日金曜日

ぼくらの新・国富論 スタートアップ・アカデミー 感想

現在活躍する若い起業家たちをインタヴューした雑誌。
色々と参考になりました。

起業するにもリスクヘッジを考えておく

スタートアップを考える場合は、いきなり退路を立ってやるのではなく、会社勤めをしながらでも十分できるし、そうすべきではないかという考え方です。
僕もこの起業方法をお薦めします。特に日本の場合は、出資してくれるVCを探すのは大変ですからね。今は起業する環境が昔よりはるかに充実しています。特にエンジニアの方ならこれがベストです。

努力は情熱に勝てない

ずっと努力するってごく一握りの天才しかできません。大抵は燃え尽きるか、心が折れるのが関の山です。 起業する分野は自分の好きな分野にしましょう。儲かりそうだからという考えは、危ないです。ただし、お金が何より大好きなら何やってもうまくいくかもしれません

海外と日本のベンチャーは違う

色々なスタートアップの本を読んでいて思うことはこれですね。
起業に対する社会の捉え方が日本と他の国では違います。
日本での起業は、自分が勝負する土壌に合わせないといけません。
ITとかは比較的考え方も同じですかね。

投資するかは人を見る

大事。結局人ですよね。成功する人ってだいたい何やってもうまくいきます。

良い本だと思うので、起業考えている人は読んでみてください。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月14日金曜日

rails4 twitterでログイン認証 その2

rails4でtwitterログイン認証を扱ったのでメモ。前回の続き

環境

  • rails(ruby2.1.0, rails4.0.3)
  • twitterのdeveloper登録済み
  • mongoDB

前回は、pathまで設定したので、今回はmongoDB周りの整備をする
まずは、mongoDBをrsepecでテストするための設定を行う

spec_helper.rbに以下を記述


  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = false

  # Database Cleaner
  config.before(:suite) do
    DatabaseCleaner[:mongoid].strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner[:mongoid].start
  end

  config.after(:each) do
    DatabaseCleaner[:mongoid].clean
  end

上記のコードにはDatabaseCleanerのgemが必要なので、installしていない場合は以下のようにGemfileに記載してbundle updateを行うこと


group :test do
  gem "database_cleaner", ">= 0.9.1"
  gem "email_spec", ">= 1.4.0"
end

モデルの作成。providerとuidは必須。monogoDBなので、時間はtime型を使用


rails g mongoid:model user provider:string uid:string 
name:string nickname:string email:string image:string 
created_at:time updated_at:time deleted_at:time

sessionコントローラーにcreate, failure, destroyメソッドを記述


  # twitter login first
  def create
   auth = request.env["omniauth.auth"]
   user = User.where(:provider => auth['provider'], :uid => auth['uid']).first
          || User.create_with_omniauth(auth)
   if user
     session[:user_id] = user.id
     redirect_to :controller => 'topic', :action => 'index'
   else
     render :index
   end
  end

  # twitter login failure
  def failure
   render :index, :alert => "Authentication error"
  end

  # sign out
  def destroy
    reset_session
    render :index, :notice => 'Signed out!'
  end

rspec用のテストを用意。ファイル名はspec/controllers/session_controller_spec.rb


  describe "GET create" do

    before do
      request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:twitter]
    end

    it "should successfully create a user" do
      expect {
        post :create, provider: :twitter
      }.to change{ User.count }.by(1)
    end

    it "should successfully create a session" do
      session[:user_id].should be_nil
      post :create, provider: :twitter
      session[:user_id].should_not be_nil
    end

    it "should redirect the user to the topic/index" do
      post :create, provider: :twitter
      response.should redirect_to(:controller => 'topic', :action => 'index')
    end

  end

  describe "GET failure" do
    it "should render the index template" do
      get :failure
      response.should render_template("index")
    end
  end

  describe "GET destroy" do

    before do
      request.env['omniauth.auth'] = OmniAuth.config.mock_auth[:twitter]
      post :create, provider: :twitter
    end
 
    it "should clear the session" do
      session[:user_id].should_not be_nil
      delete :destroy
      session[:user_id].should be_nil
    end
 
    it "should redirect to the index page" do
      delete :destroy
      response.should render_template("index")
    end
  end


mock_auth[:twitter]で利用しているモックをspec_helper.rbに記載


# OmniAuth Mock Test Data
OmniAuth.config.test_mode = true
omniauth_hash = { 'provider' => 'twitter',
                  'uid' => '12345',
                  'info' => {
                      'name' => 'taro',
                      'email' => 'taro@taro.com',
                      'nickname' => 'jptaro'
                  }
}

OmniAuth.config.add_mock(:twitter, omniauth_hash)

テスト実行


rake spec

エラーなしで実行できるはずです。これで完了です。

twitter認証をRspecでテストするのはあまり見かけないので、実際にやっている人は少ないのかもしれませんね。シンプルなログイン操作なら必要ないかも。


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 twitterでログイン認証 その1

rails4でtwitterログイン認証を扱ったのでメモ。久しぶりなので結構忘れていて焦りました...

環境

  • rails(ruby2.1.0, rails4.0.3)
  • twitterのdeveloper登録済み
  • mongoDB

Gemfileにomniauth-twitterを記述


gem "omniauth-twitter"

gem更新


bundle update

コントローラー作成。コントローラ名は基本通りsession。


rails generate controller session

routes.rbにpathを設定


  # auth
  get '/auth/:provider/callback' => 'session#create'
  get '/auth/failure' => 'session#failure'
  get '/signout' => 'session#destroy', :as => :signout

routes.rbのテストコードを記述。テストコードはspec/routing/session_route_spec.rbとする


  describe 'GET twitter auth success' do
    it "routes /auth/callback to the session controller" do
      expect(get("/auth/twitter/callback")).
        to route_to(:controller => "session", :action => "create", :provider => "twitter")
    end
  end

  describe 'GET twitter auth failure' do
    it "routes /auth/callback to the session controller" do
      expect(get("/auth/failure")).
        to route_to("session#failure")
    end
  end

  describe 'GET sign out' do
    it "routes /signout to the session controller" do
      expect(get("/signout")).
        to route_to("session#destroy")
    end
  end

テスト実行


rake spec

エラーなしで実行できたらOK。

長くなりそうなので、ひとまずここまで。分割します。


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月13日木曜日

vagrant centOS6.4 rails環境構築 chef導入まで2 nginx環境構築

環境

  • vagrant 1.2.2 @centOS6.4
  • ruby2.1.0&rbenv

前回の続き。chefを導入します。

gem listでbundlerの有無を確認。ない場合はinstall


// install
gem install bundler

// 再読み込み(絶対やること)
rbenv rehash

Gemfileを作成


source 'http://rubygems.org'

gem 'chef'
gem 'knife-solo', '~> 0.3.0.pre3'

bundle install


bundle install

リポジトリを作る


// envフォルダ作成
mkdir env

// envフォルダに移動
cd env

// リポジトリ作成
bundle exec knife solo init chef-repo

-rw-rw-r-- 1 vagrant vagrant   75 Mar 12 14:56 Gemfile
-rw-rw-r-- 1 vagrant vagrant 1777 Mar 12 15:06 Gemfile.lock
drwxrwxr-x 8 vagrant vagrant 4096 Mar 12 15:10 chef-repo

nginxのクックブック作成


// 移動
$ cd chef-repo

knife cookbook create nginx -o cookbooks

** Creating cookbook nginx
** Creating README for cookbook: nginx
** Creating CHANGELOG for cookbook: nginx
** Creating metadata for cookbook: nginx

install用のレシピを作成


# /env/chef-repo/cookbooks/nginx/recipes/default.rb

package "nginx" do
  action :install
end

/chef-repo配下に実行solo.rbとlocalhost.jsonを用意


# localhost.json

{
  "run_list":[
    "recipe[nginx]"
  ]
}

# solo.rb

file_cache_path "/tmp/chef-solo"

cookbook_path ["/home/vagrant/env/chef-repo/cookbooks"]

chef-soloを実行


sudo env PATH=$PATH chef-solo -c solo.rb -j ./localhost.json

Starting Chef Client, version 11.10.4
Compiling Cookbooks...
Converging 1 resources
Recipe: nginx::default
  * package[nginx] action install (up to date)

Running handlers:
Running handlers complete

Chef Client finished, 0/1 resources updated in 7.002227939 seconds

ここのsudoコマンドがポイント。rbenvを使用してる場合、envを付加しないと、sudo: chef-solo: command not foundになる。/etc/環境を汚したくない場合は、こう使う。

結局覚えるコツは何回も色々やってみて、ビルド&スクラップで試してみることですね。


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月12日水曜日

vagrant centOS6.4 rails環境構築 chef導入まで

環境

  • vagrant 1.2.2

vagrantの初期起動はprovisioningで設定するのが一般的ですが、慣れないうちは手動で環境を設定することもあると思います。 その手順メモです。

vagrantにcensOSを追加。ある場合は不要。vagrant box listでボックスの一覧が確認できます。


vagrant box add centos64-x86_64-20131030 https://github.com/2creatives/vagrant-centos/releases/download/v0.1.0/centos64-x86_64-20131030.box

vagrantを作成(起動)してログイン


// 作成
vagrant init centos64-x86_64-20131030

// 起動
vagrant up

// ログイン
vagrant ssh

gitをinstall


sudo yum -y install git

git --version
git version 1.7.1

rbenv をインストール


git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

環境設定


// PATH に追加
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

// .bash_profile に追加
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

// 設定の再読み込み
$ exec $SHELL -l

// rbenvの確認
rbenv --version
rbenv 0.4.0-89-g14bc162

ruby-buildをinstall


git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

OpenSSLを導入(これがないとrubyのコンパイルに失敗してしまいます)


sudo yum -y install openssl-devel

ruby(2.1.0)をinstall


rbenv install -v 2.1.0

環境設定と確認


// 再読み込み
rbenv rehash

// インストールされたruby一覧
rbenv versions
  2.1.0

// デフォルト設定
rbenv global 2.1.0

// バージョンを確認   
ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]

以上で完了。
続いて、chefですが、次回


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

第五の権力---Googleには見えている未来 感想2

google CEOのシュミット氏の書いた本。
この本の中から「インターネットの国境化」をちょっと考察してみようと思います。

インターネットが世の中に絶対必要なインフラとなって久しいですが、インターネットで一番難しい問題は「何をどこまで開放する」かにつきます。

日本にいると実感はありませんが、ほとんどの国でフィルタリング(情報規制)はおこなわれています。
世界で最も有名なのは中国のフィルタリングですが、他にもトルコ、ドイツ、韓国、マレーシア等、国によって様々な形でフィルタリングが行われています。
フィルタリングには賛否ありますが、これはいたしかたない点もあり、日本でも小さい子供の両親がネット閲覧にフィルタリングをかけるのは責めるべきではないでしょう。

個人的には、日本でもそのうち規制はある程度入るようになるのではないかと思っています。
(とはいえ、英語と中国語ができると世界の大抵の情報は取れてしまいますが)

作中にcold war(冷戦)からcold war(コード戦争)とありますが、この傾向はますます高まっていくと思います。
インターネットの世界の進歩は驚く程早いです。世界中がよりお手軽に繋がるようになっているので、この傾向はますます強まっています。

インターネットに国境はないとはいいますが、扱える言語がなにかで取得出来る情報は結構限られてきます。
どの国でも自国民に触れられたくない、知られたくない情報というのはあると思うのですが、情報を遮断するというのは一つの手なのかなとは思います(他の国からだとわかっちゃうけど)。
本来はそういった情報は精査して、踊らされないことが重要なのですが、現実問題不可能です。

世界と綿密に繋がる必要はあるが、自国は自国で「何をどこまで開放する」かを決めなければいけない難しい時代が来た(これから来る)のだと思います。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

vagrantのcentOS6.3にmongoDBをinstall

環境

  • vagrant centOS6.3

rails4アプリで利用したのでメモ。

vagrantを起動して、yumでinstall


sudo yum install mongo-10gen mongo-10gen-server

しかし、yumでintsallに失敗。以下のエラーメッセージ


sudo yum install mongo-10gen mongo-10gen-server
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Setting up Install Process
No package mongo-10gen available.
No package mongo-10gen-server available.
Error: Nothing to do

yumリポジトリがないので作成する


// 移動
cd etc/yum.repos.d/

// nginxのリポジトリをコピー
sudo cp nginx.repo 10gen.repo

// 10gen.repoファイルの中をviで以下のように変更

# /etc/yum.repos.d/10gen.repo

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1

上記後、もう一度sudo yum install mongo-10gen mongo-10gen-serverで成功する

起動


sudo service mongod start

停止


sudo service mongod stop

自動起動


sudo chkconfig mongod on

バックアップ


mongodump -host localhost -db {db_name}

バックアップはデフォルトだとカレントフォルダのdumpディレクトリに格納されます


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月2日日曜日

rails4 twitter APIを操作する その4 monogoDb導入と操作

railsでtwitter APIを扱いたかったのでメモ

環境

  • rails(ruby2.1.0, rails4.0.3)でアプリの雛形を作成し、herokuなどのサーバーへdeploy済

monogodbを導入

自分の環境では、昔のversionが導入されていたので、monogdbを最新にする。


brew upgrade mongodb

pathを設定する。ターミナルを開いて以下のコマンドを叩く


ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

mongod

mongo -version

MongoDB shell version: 2.4.6

チュートリアルで基本を理解。利用したのは以下のチュートリアル。

公式のGETTING STARTEDを読めば他は必要ないかもしれませんが、時間がない場合は Mongodbの薄い本でとりえあえず理解すると良いでしょう。

Gemfileに記載


gem 'mongoid', git: 'https://github.com/mongoid/mongoid.git'

bundle installとconfigの作成


bundle install

rails g mongoid:config

モデルを作成


rails g mongoid:model summary_tweet tweet_id:integer

保存処理をコントローラーに記載


  def save

 # 既に登録済みでないことを確認
 summaryTweet = SummaryTweet.where(:tweet_id => params[:tweetid].to_i).first
 if summaryTweet
   flash[:notice] = "登録済み"
 else
   SummaryTweet.create(tweet_id: params[:tweetid].to_i)
   flash[:notice] = "登録した"
 end
   
  end

処理が成功すると、mongoid.ymlのdatabaseに設定した名前で、collectionが作成されています。


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2014年3月1日土曜日

rails4 twitter APIを操作する その3 特定のTweetを取得

railsでtwitter APIを扱いたかったのでメモ

環境

  • rails(ruby2.1.0, rails4.0.3)でアプリの雛形を作成し、herokuなどのサーバーへdeploy済

特定のTweetを取得する方法

前回利用したtwitter gemを使う。
今回行った実装は一覧から特定のtweetを選択→詳細のtweetを表示のパターン.

一覧から特定のボタンを押すview
tweetを特定出来るように、idを指定します。

 
<%= button_to "詳細 »".html_safe , {:action => "save", :tweetid => tweet.id},
{:class => 'btn btn-default'} %>

パラメーターを取得するコントローラーのsaveメソッド

 
  def save

    client = Twitter::REST::Client.new do |config|
      config.consumer_key = 'consumer_key'
      config.consumer_secret = 'consumer_secret'
      config.oauth_token = 'oauth_token'
      config.oauth_token_secret = 'oauth_token_secret'
    end

    status = client.status(params[:tweetid])
    @tweet = status
    
  end

statusメソッドにidを指定することで、特定のTweetデータの取得が可能です。
最初はjsonをまるごと取得しようと思ったのですが、twitter gemではjsonは取得できないようです(多分)。 なので、idを使ってデータを取得するやり方が一般的になるみたいです。
特定のIDを複数取得する場合はstatusesメソッドを使うとTweetクラスが複数で取得出来るみたいです。

さて、次は取得したデータをDBに入れてみます。あまり使ったことないのですが、mongoDBを使おうと思います
でわ


参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...