rvm + rails3 + passenger + apache + mongoDB + mongoid on [Ubuntu]

Standard

きっとまた忘れるのでメモ。
 
 
rvm インストール
 
これ
 
 
rails3とpassenger
 
rvmかしこい。

  • rvm install 1.9.2
  • rvm use 1.9.2 –default
  • rvm 1.9.2 –passenger
  • rvm 1.9.2
  • gem install passenger
  • rvmsudo passenger-install-apache2-module

 
rails3が入ってないときは入れる。
libncurses5-dev libreadline6-devが入ってなければいれてから

  • sudo aptitude install libncurses5-dev libreadline6-dev
  • gem install rails –pre


 
 
/etc/apache2/httpd.conf

LoadModule passenger_module /home/USERNAME/.rvm/gems/ruby-1.9.2-p0/gems/passenger-3.0.0/ext/apache2/mod_passenger.so
PassengerRoot /home/USERNAME/.rvm/gems/ruby-1.9.2-p0/gems/passenger-3.0.0
PassengerRuby /home/USERNAME/.rvm/bin/passenger_ruby

 
 
 
railsプロジェクト用のバーチャルホストを設定
 
DocumentRoot はrailsプロジェクトの PROJECTNAME/public で設定する
/etc/apache2/sites-available/bugcloud.net

<virtualhost *:80>
    ServerName bugcloud.net
    DocumentRoot /home/USERNAME/Sites/PROJECTNAME/public
    <directory /home/USERNAME/Sites/PROJECTNAME/public>
        AllowOverride all
        Options -MultiViews Indexes FollowSymLinks 
        Order allow,deny
        allow from all
    </directory>
    ErrorLog /home/USERNAME/Sites/PROJECTNAME/log/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog /home/USERNAME/Sites/PROJECTNAME/log/access.log combined
</virtualhost>

 
/etc/hosts に追加

127.0.0.1 localhost.bugcloud.net localhost bugcloud.net

 
反映

  • sudo a2ensite bugcloud.net

再起動

  • sudo /etc/init.d/apache2 restart

 
railsプロジェクト作成

  • r new myproject –skip-prototype

http://bugcloud.net/

でrailsのいつものindexページが出てくるはず。
 
 
 
mongoDB
 
パッケージあるけどバグがあったりする。
“mongo”って叩いて”libmozjsが見つからない”みたいなエラー吐いたときは、snapshotからインストール。

  • sudo apt-key adv –keyserver keyserver.ubuntu.com –recv 7F0CEB10
  • sudo apt-add-repository ‘deb http://downloads.mongodb.org/distros/ubuntu 10.4 10gen’
  • sudo apt-get update
  • sudo aptitude install mongodb-snapshot

 

ここをそのまま実行。http://mongoid.org/docs/installation/
日本語訳。http://d.hatena.ne.jp/babie/20100809/1281316972

  • gem install mongoid –pre
  • gem install bson_ext

railsプロジェクトに移動してGemfileを修正

gem 'mongoid', '2.0.0.beta.19'
gem 'bson_ext', '1.1.1'

を追加して、

  • bundle install vendor/bundle

.gitignore に vendor/bundle を追加

  • r g mongoid:config

 
config/mongoid.yml

defaults: &defaults
  host: localhost
  # slaves:
  #   - host: slave1.local
  #     port: 27018
  #   - host: slave2.local
  #     port: 27019
  autocreate_indexes: false
  allow_dynamic_fields: true
  include_root_in_json: false
  parameterize_keys: true
  persist_in_safe_mode: false
  raise_not_found_error: true
  reconnect_time: 3

development:
  < <: *defaults
  database: PROJECTNAME_development

test:
  <<: *defaults
  database: PROJECTNAME_test

# set these environment variables on your prod server
production:
  <<: *defaults
  database: PROJECTNAME_production
# host: <%= ENV['MONGOID_HOST'] %>
# port: < %= ENV['MONGOID_PORT'] %>
# username: < %= ENV['MONGOID_USERNAME'] %>
# password: < %= ENV['MONGOID_PASSWORD'] %>
# database: < %= ENV['MONGOID_DATABASE'] %>

 
config/application.rb を編集
ActiveRecordを使わないように。あとログの設定。 

#require 'rails/all'
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"

class Application < Rails::Application 内に追加

config.mongoid.logger = Logger.new($stdout, :warn)

 
 
 
scaffold で確認。モデルの属性を配列にしてみる。

  • r g scaffold idol name:string favorite:array

 
app/views/idols/_form.html.erb

<script>
 $(function(){
    $('#addTextFieldButton').bind('click', function(){
      $(this).parent().append('<br/><input id="idol_favorite" name="favorite[]" size="30" type="text" />');
    });
  });
</script>
<%= form_for(@idol) do |f| %>
  <% if @idol.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@idol.errors.count, "error") %> prohibited this idol from being saved:</h2>

      <ul>
      <% @idol.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :favorite %><br />
    <input id="idol_favorite" name="favorite[]" size="30" type="text" />
    &nbsp;&nbsp;&nbsp;&nbsp;
    <a href="#addTextFieldButton" id="addTextFieldButton">add</a>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

 
app/controllers/idol_controller.rb

class IdolsController < ApplicationController
  # GET /idols
  # GET /idols.xml
  def index
    @idols = Idol.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @idols }
    end
  end

  # GET /idols/1
  # GET /idols/1.xml
  def show
    @idol = Idol.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @idol }
    end
  end

  # GET /idols/new
  # GET /idols/new.xml
  def new
    @idol = Idol.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @idol }
    end
  end

  # GET /idols/1/edit
  def edit
    @idol = Idol.find(params[:id])
  end

  # POST /idols
  # POST /idols.xml
  def create
    params[:idol][:favorite] = params[:favorite]
    @idol = Idol.new(params[:idol])

    respond_to do |format|
      if @idol.save
        format.html { redirect_to(@idol, :notice => 'Idol was successfully created.') }
        format.xml  { render :xml => @idol, :status => :created, :location => @idol }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @idol.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /idols/1
  # PUT /idols/1.xml
  def update
    @idol = Idol.find(params[:id])
    params[:idol][:favorite] = params[:favorite]
    respond_to do |format|
      if @idol.update_attributes(params[:idol])
        format.html { redirect_to(@idol, :notice => 'Idol was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @idol.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /idols/1
  # DELETE /idols/1.xml
  def destroy
    @idol = Idol.find(params[:id])
    @idol.destroy

    respond_to do |format|
      format.html { redirect_to(idols_url) }
      format.xml  { head :ok }
    end
  end
end

 
 
画面からデータを登録したら、確認。

  • mongo
  • use PROJECTNAME_production
  • db.idols.find()

 
screenshot

screenshot

 
できてるっぽい。

Facebook comments:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>