Ruby 2.0, Rails 4.0, devise, mysql, rails_admin の初期設定メモ

ruby2.0 rails4.0の環境が整っている事を前提とします。

プロジェクト作成

$ rails new sample —database=mysql

データベースの設定(developmentのみ表記、他は割愛)

まず、以下の記述があるか確認。無ければ各自付け足してください。

# Gemfile


# Use mysql as the database for Active Record
gem 'mysql2' 


念のためターミナルから以下を実行して、mysql2をインストールする。

$ gem install mysql2

設定ファイルを編集。
mysqlのユーザーは各自作成しましょう。(追記するかも)
ここで注意点。
パスワードはクォートで囲う必要がある様です。ruby初心者のため、細かい原因が分からないのですが、多分パスワードが数字だったのが悪いのかと思います。試していませんが(試せ)、もしかしたらユーザー名も、数字の時はクォートで囲うべきなのかもしれません。
これに関してはstackoverflowに回答がありましたが、どこにあったか分からなくなりました(探せ)。

# config/database.yml

development:
  adapter: mysql2
  encoding: utf8
  database: sample_db
  pool: 5
  username: sample_mysql_user  
  password: ‘user_password’  
  host: localhost
  socket: /tmp/mysql.sock

その後ターミナルに戻り、以下を実行。
db:setupはdb:createの処理もやってくれるので、db:createは冗長なのですが、下に書くエラーが出るのがdb:createのタイミングなので、一応。

$ rake db:create
$ rake db:migrate

これでデータベースとテーブルの作成が完了。

config/database.ymlにてパスワードを囲わなかった場合のエラーは以下のようになる。

$ rake db:create —trace

と叩くと

** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:create
no implicit conversion of Fixnum into String

……….

Couldn’t create database for {“adapter”=>”mysql2”, “encoding”=>“utf8”, “database”=>”sample_db”, “pool”=>5, “username”=>”sample_mysql_user”, “password”=>user_password”, “host”=>”localhost”, “socket”=>”/tmp/mysql.sock”}

と表示され、rake db:migrateを叩いても同じようなエラーとなります。
一応メモとして。

deviseとrails_adminの設定

まずGemfileに以下を記述

# Gemfile
     .
     .
     .
gem ‘devise’
gem ‘rails_admin'

その後、コンソールにて

$ bundle install

と叩く。

devise

$ rails g devise:install


===============================================================================
Some setup you must do manually if you haven't yet:
  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:
       config.action_mailer.default_url_options = { :host => 'localhost:3000' }
     In production, :host should be set to the actual host of your application.
  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:
       root :to => "home#index"
  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:
       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>
  4. If you are deploying on Heroku with Rails 3.2 only, you may want to set:
       config.assets.initialize_on_precompile = false
     On config/application.rb forcing your application to not access the DB
     or load models when precompiling your assets.
  5. You can copy Devise views (for customization) to your app by running:
       rails g devise:views
===============================================================================


上の指示通りに設定を行う。

1
# config/environments/development.rb 
     .
     .
     .
     # for devise
     config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
end
2

まだcontrollerを作成していないので、後回し

3
# app/views/layouts/application.html.erb
     .
     .
     <%= yield %>

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>
     .
     .
4

今はrails4.0以上を使う事前提なので、この設定は必要なし。

5

viewを作成する際に行う。


これで、devise側から指示された設定はひとまず完了。

次にUserモデルを作成する。
Userには管理者であるかないかという属性を持たせたい。
今回は、deviseのhowtoにあるoption 2を選択する(以下URLを参照)。
https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role#option-2---adding-an-admin-attribute

そこで、次のコマンドを叩く

$ rails g devise User
$ rails generate migration add_admin_to_users admin:boolean

そして、生成されたmigrationファイルを以下のように編集。

# db/migrate/${DATE_CREATED}_add_admin_to_users.rb


class AddAdminToUsers &lt; ActiveRecord::Migration
  def self.up
    add_column :users, :admin, :boolean, :default => false
  end

  def self.down
    remove_column :users, :admin
  end
end

マイグレーションを行う前に、まずrails_adminの設定をする。

rails_admin

$ rake g rails_admin:install

2つ聞かれるが、今回はadminをuserに組み込む事にしたので、両方、空のenterを押してしまえばよい。

これでrails_adminの設定は完了。簡単。


deviseとrails_adminの設定が終わったので

$ rake db:migrate

する。


あとはcontrollerを作成して、routeを追加して、viewを作成する。


テスト出来るように、手順を残しておく。
今回はroot home#indexを使う。deviseが例を書いてくれているrouteです。

$ rails g controller home index
# app/controllers/home_controller.rb

class HomeController < ApplicationController

  before_filter :authenticate_user! # 追加

  def index
  end
end 

こうして、railsサーバーを立ち上げる。

$ rails s

http://localhost:3000/

を見てみると、deviseにより作られた画面が表示されるので、sign upボタンを押して、登録すると、rails_adminの画面を見る事が出来る。

以上。
随時追記or変更して行く予定。