坊主が上手にHatenaに坊主のコードを書いた

ITBOZEによるIT技術の備忘録ブログ

AptanaStudioとRailsとGitの環境のつくりかた

どもっ。ITBOZEです〜。

以前は、Emacs使いだったけど、最近はもっぱら、Vimmerですー。

ところで、「VimEmacsは、ちょっと。。。」とか「Sublimeとかも、ちょっと。。。」とか言われる方がいらっしゃる。

で、「今まで、EcliplseでJava頑張ってきますたー。RailsEclipseで、なんとかやれないの?」って声も聞くわけです。。。

そんな声にお応えするのが、今回の内容。

1. PCに以下のものを事前にインストールしておく

  • Ruby
  • Rails
  • Git
    • Gitのグローバル設定も済ませておく

2. AptanaStudioをインストール

3. AptanaStudioを日本語化

4. AptanaStudioのGitの設定

  • 「PortableGit」は不便なので、無効にする

    • 環境設定 > チーム > Git
      • 「Automatically attach our git support to projects added that have git repositories」のチェックボックスを外す
  • EGitプラグインをインストール

    1. ヘルプ > 新規ソフトウェアのインストール
    2. 以下の項目を入力
    3. 以下の2つにチェックを入れて、インストール
      • Eclipse Gitチームプロバイダー
      • JGitにチェック
  • EGit用のビューの表示方法

    1. ウィンドウ > ビューの表示 > その他
    2. フィルター入力欄に「Git」と入力
    3. 以下の3つのビューをクリック

5. RailsプロジェクトをGitクローンから作成する手順

  1. ファイル > 新規 > Railsプロジェクト
  2. 以下の項目を入力
    • 名前: 任意
    • ロケーション: 任意
    • Generate App:
      • 「Clone an existing git project」にチェック
      • ロケーション: github(またはBitbucketなど)のリポジトリURL
  3. 「完了」ボタン押下
  4. 作成されたプロジェクトファイルで右クリック
  5. 「プロパティー」をクリック
  6. 「プロジェクト・ネーチャー」を選択して、「Rails」のチェックボックスをチェック
  7. ダイアログが表示されるので、「はい」を押下

6. RailsプロジェクトとGithub(またはBitbucketなど)と連携させる方法

1. sshの設定
  1. 環境設定 > フィルター入力欄に「ssh」と入力
  2. 「一般 > ネットワーク接続 > SSH2」と表示されるので、「SSH2」を押下
  3. 一般タブでの設定
    • SSH2ホーム: 自分の環境での「.ssh」ディレクトリの場所
    • 秘密鍵: 「.ssh」ディレクトリ内にある秘密鍵ファイル(id_rsaなど)
2. gitの設定
  1. 環境設定 > フィルター入力欄に「git」と入力
  2. チーム > Git > 構成
  3. リポジトリ設定ボタンをクリック
  4. リポジトリー」セレクトボックスから、対象のリポジトリを選択
  5. 「ロケーション」欄の「開く」ボタンを押下
  6. 「構成」ファイルが表示されるので、[remote "origin"]のurlに、リポジトリのURLを入力して保存

7. Railsプロジェクトの修正箇所をGithub(またはBitbucketなど)へPushする手順

  1. ファイルを修正すると、修正ファイルがグリーンで表示される
  2. Gitステージングビューの「ステージされていない変更」欄に、修正ファイルが表示される
  3. 修正ファイルを、ステージされていない変更」欄からステージされた変更」欄へドラッグ・アンド・ドロップ
  4. コミットメッセージ欄に、メッセージを入力
  5. 「コミット」ボタンを押下
  6. プロジェクトを右クリック > チーム > Push Branch master...

8. Railsプロジェクトの実行(サーバー起動方法など)

  1. 実行 > Rails Console
  2. コンソール用のビューが開く
  3. このコンソールビューで、rails s を実行
  4. bundle installrake db:migrateなどのコマンドも、このコンソールビューで実行できる

いかがだったでしょうか?参考になれば、幸いです。

qiita.com

Capistrano3.xを初めから丁寧に

どもっ。ITBOZEでーす。 Haskell, Common-lispなどをカジり、最近は、Scalaがマイブームです。

ところで、Capistranoって、2.x系と3.x系の情報がWeb上で入り混じってて、情報の整理に、現在苦労している方(または、過去に苦労したよーって方)、いらっしゃいませんか? 自分は、当初、困惑しました。。。

そこで、これからCapiったるでーって方のためになればと、手順をまとめてみました。

1. Gemの追加

  • Gemfile に次のGemを追加
# これを使用しないと、デプロイ時にエラーが発生する
gem 'therubyracer',  platforms: :ruby

# cronを使う場合のみ
gem 'whenever', require: false

group :deployment, :test do
  gem 'capistrano', '~> 3.2.1'
  gem 'capistrano-rails'
  gem 'capistrano-rbenv'
  gem 'capistrano-bundler'
  gem 'capistrano3-unicorn' # unicornを使っている場合のみ
end

gem 'unicorn'
  • bundle installを実行
$ bundle install

2. Capistranoの設定ファイルを生成

$ cap install
  • 以下のファイルが作られる。
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
Capifie

3. Capfileの設定

  • Capfile を以下のように変更
# [必須] Capistranoの設定を読み込む。おまじない
require 'capistrano/setup'

# [必須] デプロイフレームワークを読み込み。
require 'capistrano/deploy'

# rbenvを使用している場合
require 'capistrano/rbenv'

require 'capistrano/rails'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'

require 'capistrano/bundler'
require 'capistrano3/unicorn' # unicornを使っている場合のみ
require 'whenever/capistrano' # wheneverを使っている場合のみ


# [必須] `lib/capistrano/tasks' に定義されたタスクを読み込む
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

4. Capistrano 共通のデプロイ設定

  • 共通のデプロイ情報を config/deploy.rb に記入
# config valid only for Capistrano 3.1
lock '3.2.1'

# アプリケーション名
set :application, 'first_app'
# githubのurl。プロジェクトのgitホスティング先を指定する
set :repo_url, 'git@github.com:YOUR_ACCOUNT/your_app.git'

# Default branch is :master
# deploy時にブランチを選択したい場合は、以下のコメント部分を外す
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call

# デプロイ先のサーバーのディレクトリ。フルパスで指定
set :deploy_to, '/path/to/dir/your_app'
# Version管理はgit
set :scm, :git

# ログを詳しく表示
set :format, :pretty
set :log_level, :debug

# sudo に必要
set :pty, true

# 何世代前までリリースを残しておくか
set :keep_releases, 5

#rbenvをシステムにインストールしたか? or ユーザーローカルにインストールしたか?
set :rbenv_type, :user # :system or :user
# rubyのversion
set :rbenv_ruby, '2.1.4'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
set :rbenv_roles, :all # default value

# デプロイ先のサーバーの :deploy_to/shared/config/database.yml のシンボリックリンクを
# :deploy_to/current/config/database.yml にはる。
# ただ、注意すべきは、先にshared以下にファイルをアップロードする必要があること
# 上記のファイルアップロード処理は、下記の「upload」タスクで行う
set :linked_files, %w{config/database.yml}

# 同じくsharedに上記のディレクトリを生成し、currentにシンボリックリンクを張る
set :linked_dirs, %w{bin log tmp/backup tmp/pids tmp/cache tmp/sockets vendor/bundle}

# bundle installの並列実行数
set :bundle_jobs, 4


namespace :deploy do

  # 上記linked_filesで使用するファイルをアップロードするタスク
  desc 'Upload database.yml'
  task :upload do
    on roles(:app) do |host|
      if test "[ ! -d #{shared_path}/config ]"
        execute "mkdir -p #{shared_path}/config"
      end
      upload!('config/database.yml', "#{shared_path}/config/database.yml")
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:app) do
      invoke 'unicorn:restart'
    end
  end
end

# linked_filesで使用するファイルをアップロードするタスクは、deployが行われる前に実行する必要がある
before 'deploy:starting', 'deploy:upload'
# Capistrano 3.1.0 からデフォルトで deploy:restart タスクが呼ばれなくなったので、ここに以下の1行を書く必要がある
after 'deploy:publishing', 'deploy:restart'

5. 環境別のデプロイ設定

  • 環境ごとに異なる設定を config/deploy/staging.rb(production.rb) に記述
set :stage, :staging
set :rails_env, "staging"
set :unicorn_rack_env, "staging"

# この設定がないと、デプロイ先でdb:migrateされない
set :migration_role, 'db'

role :app, %w{USER_NAME@IP_ADDRESS}
role :web, %w{USER_NAME@IP_ADDRESS}
role :db,  %w{USER_NAME@IP_ADDRESS}, :primary => true
#role :db,  %w{USER_NAME@IP_ADDRESS}

server 'IP_ADDRESS', user: 'USER_NAME', roles: %w{web app db}

set :ssh_options, {
    keys: [File.expand_path('/key/path/to/')],
    forward_agent: true,
    auth_methods: %w(password),
    password: 'password'
}

6. Unicornの設定ファイルを作成

  • web上には、lib/capistrano/task の直下に、unicorn.rbファイルを作成し、unicornの起動や停止コマンドを書くものもある。
    しかし、以下のような設定ファイルを記載する方法が最近のトレンドのようです。

  • configディレクトリの直下に、unicorn.rbを作成していた場合は、削除

$ cd config
$ rm unicorn.rb
  • 環境ごとの設定を格納するディレクトリを作成
$ cd config
$ mkdir unicorn
$ cd unicorn
  • 以下の内容を、config/unicorn/staging.rb(production.rb) に記述
app_path = '/path/to/dir/your_app'

worker_processes 2
working_directory "#{app_path}" + "/current"

# This loads the application in the master process before forking
# worker processes
# Read more about it here:
# http://unicorn.bogomips.org/Unicorn/Configurator.html
preload_app true

timeout 30

# This is where we specify the socket.
# We will point the upstream Nginx module to this socket later on
#listen "#{app_path}/tmp/sockets/unicorn.sock", :backlog => 64
listen "/tmp/unicorn.sock", :backlog => 64

#pid "/tmp/unicorn.pid"
pid "#{app_path}/shared/tmp/pids/unicorn.pid"

# Set the path of the log files inside the log folder of the testapp
stderr_path "#{app_path}/current/log/unicorn.stderr.log"
stdout_path "#{app_path}/current/log/unicorn.stdout.log"

before_fork do |server, worker|
  ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
end

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end

  sleep 1
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end

7. デプロイ前のチェックリスト・準備

  1. Capistranoの以下の設定ファイルについて、パラメータをすべて設定したか?

    • config/deploy.rb
    • config/deploy/staging.rb
    • config/deploy/production.rb
  2. config/environments/(staging.rb)production.rbconfig.assets.compile 値を true にしたか?

  3. config/environments/(staging.rb)production.rbconfig.serve_static_assetsの値をtrueにしたか?

    • これをtrueにしていないと、「ActionController::RoutingError」が発生し、画面が表示されない場合がある。
  4. Unicornの以下の設定ファイルを準備したか?

    • config/unicorn/staging.rb
    • config/unicorn/production.rb
  5. ステージングDB、本番DBの設定を、config/database.yml に追加しているか?

  6. ステージング、本番用のシークレットキーの設定を config/secret.yml に追加しているか?
    • 設定していないと、画面が真っ白になります。
    • シークレットキーの生成コマンドは

      $ bundle exec rake secret

  7. デプロイ用Gitリポジトリのブランチが最新の状態か?

8. 上のチェックが完了したら、capコマンドで設定を確認。

  • フォルダの生成等も行ってくれます。
# stagingのチェック
$ cap staging deploy:check

# productionのチェック
$ cap production deploy:check

9. デプロイを実行

# stagingへのデプロイ
$ cap staging deploy

# productionへのデプロイ
$ cap production deploy

10. 以下のエラーが吐かれてしまう場合の対処

  • デプロイ先のサーバーで、以下のコマンドを実行
$ yum install postgresql-devel
  • エラー内容
DEBUG [52c45f3f]     [31mAn error occurred while installing pg (0.18.1), and Bundler cannot continue.
DEBUG [52c45f3f]    Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.[0m
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as root@192.168.33.12: bundle exit status: 5
bundle stdout: An error occurred while installing pg (0.18.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.
bundle stderr: Nothing written

SSHKit::Command::Failed: bundle exit status: 5
bundle stdout: An error occurred while installing pg (0.18.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.
bundle stderr: Nothing written

Tasks: TOP => deploy:updated => bundler:install
(See full trace by running task with --trace)
The deploy has failed with an error: #<SSHKit::Runner::ExecuteError: Exception while executing as root@192.168.33.12: bundle exit status: 5
bundle stdout: An error occurred while installing pg (0.18.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.
bundle stderr: Nothing written

いかがでしたか?参考になれば幸いです。

qiita.com

Deviseの設定手順をまとめてみた。 その4 ユーザーIDで、ログイン認証編

Deviseって、デフォルトは、メルアドとパスワードでログイン認証させるんだけど、 運用面では、ユーザーIDとパスワードで認証したいケースって多いよね。

なので、手順をまとめてみた。

1. usersテーブルに、以下のカラムを追加

  • カラム名: user_id
  • 型名: string

  • migrationファイルを作成

$ rails g migration add_user_id_to_users user_id:string
  • migrationファイルの修正
class AddUserIdToUsers < ActiveRecord::Migration
    def change
        add_column :users, :user_id, :string, null: false, default: ""
    end
end
  • migrationファイルを実行
$ rake db:migrate

2. usersテーブルに追加したuser_idに、インデックスを追加

  • migrationファイルを作成
$ rails g migration add_user_id_index_to_users
  • migrationファイルに、add_indexを追加
class AddUserIdIndexToUsers < ActiveRecord::Migration
    def change
        add_index :users, :user_id, unique: true
    end
end
  • migrationファイルを実行
$ rake db:migrate

3. usersテーブルのemailのインデックスを削除

  • migrationファイルを作成
$ rails g migration remove_email_index_from_users
  • migrationファイルに、remove_indexを追加
class RemoveEmailIndexFromUsers < ActiveRecord::Migration
    def change
        remove_index :users, :email
    end
end
  • migrationファイルを実行
$ rake db:migrate

4. app/controllers/application_controller.rbに、以下の内容を追記

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
    # strong parametersを設定し、user_idを許可
    devise_parameter_sanitizer.for(:sign_up){|u|
        u.permit(:user_id, :password, :password_confirmation)
    }
    devise_parameter_sanitizer.for(:sign_in){|u|
        u.permit(:user_id, :password, :remember_me)
    }
end

5. app/model/user.rbを、以下のように修正

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :authentication_keys => [:user_id]
  
  # user_idを必須、一意とする
  validates_uniqueness_of :user_id
  validates_presence_of :user_id

  # user_idを仕様してログインするようオーバーライド
  def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      # 認証の条件式を変更する
      where(conditions).where(["user_id = :value", {:value => user_id}]).first
    else
      where(conditions).first
    end 
  end 

  # 登録時にemailを不要とする
  def email_required?
    false
  end 

  def email_changed?
    false
  end 
end

6. config/locales/devise.views.ja.ymlに、以下の箇所を追加

ja:
  activerecord:
    attributes:
      user:
        current_password: "現在のパスワード"
        email: "メールアドレス"
        user_id: "ユーザーID" # ← この1行を追加
        password: "パスワード"
        password_confirmation: "確認用パスワード"
        remember_me: "ログインを記憶"
        ...

7. app/views/layouts/application.html.erbの、以下の箇所を修正

  <header>
    <nav>
      <% if user_signed_in? %>
        <!-- 修正箇所 START -->
        Logged in as <strong><%= current_user.user_id %></strong>.
        <!-- 修正箇所 END -->
        <%= link_to 'プロフィール変更', edit_user_registration_path %>
        <%= link_to 'ログアウト', sign_out_path %>
      <% else %>

8. 以下のファイルを、下記のように修正

  • app/views/users/registrations/new.html.erb
  • app/views/users/registrations/edit.html.erb
  • app/views/users/sessions/new.html.erb
  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :user_id %><br />
    <%= f.text_field :user_id, autofocus: true %>
  </div>

9. 以上です。

qiita.com

Deviseの設定手順をまとめてみた。 その3 Deviseの日本語化編

ところで、Deviseのログイン画面やサインイン画面、そして各種メッセージは、デフォルトは英語。 なので、運用を考えたら、やっぱり日本語化しないとね。

1. Gemfileに以下を追加

gem 'devise-i18n'
gem 'devise-i18n-views'

2. インストール

$ bundle install
  • config/application.rbja に設定
config.i18n.default_locale = :ja

3. 以上!!

  • 簡単だね!

qiita.com

Deviseの設定手順をまとめてみた。 その2 ViewとControllerのカスタマイズ編

実運用では、カスタマイズが必須だよねーってことで、 今回は、ログイン画面やサインイン画面をカスタマイズしよーって話。

1. deviseのViewをカスタマイズ

  • 前回、ユーザー管理用のテーブルとして、usersテーブルを作ってたので、以下のコマンドを実行
$ rails g devise:views users
      invoke  Devise::Generators::SharedViewsGenerator
      create    app/views/users/shared
      create    app/views/users/shared/_links.html.erb
      invoke  form_for
      create    app/views/users/confirmations
      create    app/views/users/confirmations/new.html.erb
      create    app/views/users/passwords
      create    app/views/users/passwords/edit.html.erb
      create    app/views/users/passwords/new.html.erb
      create    app/views/users/registrations
      create    app/views/users/registrations/edit.html.erb
      create    app/views/users/registrations/new.html.erb
      create    app/views/users/sessions
      create    app/views/users/sessions/new.html.erb
      create    app/views/users/unlocks
      create    app/views/users/unlocks/new.html.erb
      invoke  erb
      create    app/views/users/mailer
      create    app/views/users/mailer/confirmation_instructions.html.erb
      create    app/views/users/mailer/reset_password_instructions.html.erb
      create    app/views/users/mailer/unlock_instructions.html.erb

2. deviseのControllerをカスタマイズ

  • ここも、usersテーブルに合わせて、コントローラーを作成
$ rails g devise:controllers users
      create  app/controllers/users/confirmations_controller.rb
      create  app/controllers/users/passwords_controller.rb
      create  app/controllers/users/registrations_controller.rb
      create  app/controllers/users/sessions_controller.rb
      create  app/controllers/users/unlocks_controller.rb
      create  app/controllers/users/omniauth_callbacks_controller.rb
====================================================================

Some setup you must do manually if you haven't yet:

  Ensure you have overridden routes for generated controllers in your route.rb.
  For example:

    Rails.application.routes.draw do
      devise_for :users, controllers: {
        sessions: 'sessions'
      }
    end

====================================================================
  • 使用するコントローラーで、コメントになっているところを外す

3. ルーティング

  • 実は、ここがキモ!!

  • config/routes.rbに、以下の内容を記述

  devise_for :users, :controllers => {
    :registrations => 'users/registrations',
    :sessions => 'users/sessions'   
  } 
    
  devise_scope :user do
    get "sign_in", :to => "users/sessions#new"
    get "sign_out", :to => "users/sessions#destroy" 
  end

4. Railsを再起動して、確認。

$ rails s
  • どっすかー?ちゃんとできましたかー?

qiita.com

Deviseの設定手順をまとめてみた。 その1 導入編

ディープラーニングも、一時的な流行りで終わるのかなぁ〜。 最近、数学にハマってます(`・ω・´)キリッ

どもっ。ITBOZEです。

RailsでDeviseを使おうと思って、Googleの波をかき分けた。 で、自分なりに手順をまとめてみた。

まずは、導入編。

1. 事前準備

  • Railsプロジェクトを作成しておく
  • Postfixの設定を済ませておく(ユーザー登録の際、メールを飛ばしたい場合)

2. Gemfileに以下を追加

gem 'devise'

3. bundle install を実行

$ bundle install

4. Railsプロジェクトに、deviseをインストール

$ rails g devise:install
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===================================================================

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', port: 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

===================================================================

5. rootのURL用のコントローラーを作成

$ rails g controller Home index show

6. rootのURLをルーティングに設定

  • config/routes.rbに、以下の内容を記述
  get 'home/index'             
  get 'home/show'              
  
  root to: "home#index"

7. メッセージ表示領域を追加

  • とりあえずapp/views/layouts/application.html.erbのbodyの一番上に追記
  • とりあえず、全ての画面の上部に、
    • ログインしていない場合は、「サインイン」と「ログイン」のリンク
    • ログインしている場合は、「プロフィール変更」と「ログアウト」のリンク を表示させるようにしています。
<body>

  <header>
    <nav>
      <!-- user_signed_in? はユーザがログインしているか調べるdeviseのHelperメソッド -->
      <% if user_signed_in? %> 
        <!-- current_user は現在ログインしているUserオブジェクトを返すdeviseのHelperメソッド -->
        <!-- *_path はUserモデルを作成したときに、
        deviseにより自動で作成されてますので、rake routesで確認できます -->
        Logged in as <strong><%= current_user.email %></strong>.
        <%= link_to 'プロフィール変更', edit_user_registration_path %> |
        <%= link_to "ログアウト", sign_out_path %>
      <% else %>
        <%= link_to "サインイン", new_user_registration_path %> |
        <%= link_to "ログイン", new_user_session_path %>
      <% end %>
    </nav>
  </header>

  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  
  <%= yield %>
</body>
  • 注意点 : ログアウトのリンクタグを以下のように記述すると、ルーティングエラーが発生する。
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
  • 上記のエラーを回避するには、config/initializers/devise.rbファイルで、以下の修正をする必要がある。
config.sign_out_via = :delete
    ↓
config.sign_out_via = :get
  • ただ、上記の修正方法は、あまり良い気がしないので、ログアウトのリンクタグは、sign_out_pathが無難だと思う。

8. メソッドについて

  • 認可を必要とするコントローラーの before_action で以下のように指定。
  • ユーザーのモデル名が User の場合は以下。

    before_action :authenticate_user!

  • ユーザーがサインインしているかどうかを検証するメソッド

    user_signed_in?

  • 現在サインインしているユーザーを取得。

    current_user

  • ユーザーのセッション情報にアクセス。

    user_session

9. 認証ユーザー用のModelを作成

  • 認証ユーザー用のModel名は任意
  • 今回は、Userとする
$ rails g devise User

8. サインアップ時に確認メールを出す場合

  • db/migrate/nnnnnn_devise_create_users.rbのt.confirmableのコメントを外します。
      ## Confirmable
      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string   :unconfirmed_email # Only if using reconfirmable
  • インデックスも有効にする
    add_index :users, :confirmation_token,   unique: true

9. ModelをDBに反映

$ rake db:migrate

10. 認証チェック(アクセス制限)について

  • 必要に応じてControllerに認証チェックを追加
before_filter :authenticate_user!
  • Homeのshow画面へのアクセス制限を追加する例
class HomeController < ApplicationController
  # ユーザがログインしていないと"show"にアクセスできない
  before_action :authenticate_user!, only: :show

  def index
  end

  def show
  end
end

11. メール送信の設定

1. config/environments/development.rb
  • 必要に応じてtest.rb,production.rbにも追記
  • 値は環境に応じて変更する
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  
config.action_mailer.raise_delivery_errors = true

 ActionMailer::Base.delivery_method = :smtp
 ActionMailer::Base.smtp_settings = {
   :address => "smtp.gmail.com", # smtpサーバーのホスト名
   :port => 587,
   :authentication => :plain,
   :user_name => "送信元のメールアドレスのアカウント名",
   :password => "メールアカウントのパスワード"
 }
2. config/initializers/device.rb
config.mailer_sender = 'xxxxx@xxxx.com'  # 送信元のメールアドレス
3. app/models/user.rb
  • confirmableを追加
  devise :database_authenticatable, :registerable,:confirmable,
         :recoverable, :rememberable, :trackable, :validatable

12. Railsを起動し、動作確認

$ rails s

ぜひ、参考にしてみてください。

qiita.com

The following build commands failed:Write auxiliary files CompileC...エラーへの対処

Cordovaって、ある意味、便利。 でも、癖があるから、乗りこなすには、コツがいるよね。

どもっ。ITBOZEです。

複数人でのCordovaでのアプリ開発にて、実際に起きたエラー。

Aさんがメインで開発したソースをバージョン管理システムにコミットし、 Bさんが、そのソースを落としてきてビルドしたら、以下のエラーが吐かれた。。。

開発がほぼ完了していた時だったので、メンバー騒然?!

The following build commands failed:
    Write auxiliary files
    CompileC
/your/app/path/platforms/ios/CordovaLib/build/CordovaLib.build/Debug-iphonesimulator/CordovaLib.build/Objects-normal/i386/NSDictionary+Extensions.o
Classes/NSDictionary+Extensions.m normal i386 objective-c
com.apple.compilers.llvm.clang.1_0.compiler
    CompileC
/your/app/path/platforms/ios/CordovaLib/build/CordovaLib.build/Debug-iphonesimulator/CordovaLib.build/Objects-normal/i386/CDVInvokedUrlCommand.o
Classes/CDVInvokedUrlCommand.m normal i386 objective-c
com.apple.compilers.llvm.clang.1_0.compiler
(3 failures)
Error:
/your/app/path/platforms/ios/cordova/build:
Command failed with exit code 65
    at ChildProcess.whenDone
(/usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/cordova/superspawn.js:135:23)
    at ChildProcess.emit (events.js:98:17)
    at maybeClose (child_process.js:756:16)
    at Process.ChildProcess._handle.onexit (child_process.js:823:5)

で、結論から言うと、iosのCordova platformを入れ直すしかないみたい。

$ cordova platform remove ios
$ cordova platform add ios

で、ここで注意点!!

上記のように、iosのCordova pluginを入れ直したら、自分たちで準備して配置していたiosのアイコン用画像とスプラッシュ用画像が、デフォルトの画像になっちゃいます。

なので、くれぐれも、iosのアイコン用画像とスプラッシュ用画像は、バックアップを取っておくようにね。

Cordova - The following build commands failed:Write auxiliary files CompileC...エラーへの対処 - Qiita