Kaorina’s diary

Ruby on Railsとかとか

Linuxのお便利コマンドに触れてみたよ(その2)

オプション付きのコマンドなど、よく使うけどいちいちたたくのめんどくさい時、 自分の好きな名前でショートカットを登録してみよう。

よく使うls -laコマンドをllという名前で使えるようにしよう

laオプションを付ける事によって、.付きの隠しファイル含め、全てのファイルを表示してくれる。

よく使うからもっと楽に使いたい!


homeディレクトリ以下の.bashrcを開く

$ cd ~

$ vi .bashrc

.bashrc内にaliasを追加し、保存

alias ll='ls -la'

.bashrcを読み込む

$ source .bashrc

これでll使えるようになったよ〜。

なんでデフォルトのコマンドが動いているかを探る(軽く)

デフォルトのコマンドのありかをチェック(サンプルとして lsコマンド)

$ which is ls

/bin/ls

どうやら、デフォルトコマンドlsは /bin以下にあるらしい。

このwhichコマンドも、各種ツール等のインストール先を調べれるのでお便利です。

結論として、ここにパスが通っているから、使えるらしい!

どうゆうこうと? 環境変数PATHの中身を見てみる

$ echo $PATH

いっぱいでてきた

/usr/local/git/bin:/opt/local/bin
:/opt/local/sbin
:/Users/kaori/.rbenv/shims:/usr/bin
:/bin
:/usr/sbin:/sbin:/usr/local/bin
:/opt/X11/bin
:/usr/local/git/bin
:/opt/local/bin
:/opt/local/sbin
:/Users/kaori/.rbenv/shims
:/Users/kaori/.rvm/bin

/binがあった! ということで、/binにパスが通っているのでlsコマンドが使えるらしい。ほほう!

Linuxのお便利コマンドに触れてみたよ

社内でLinuxのお勉強会があったので備忘録。

cd, pwd, lsはよく使いますが、知らなかったのものを。

空のファイルを生成する

$ touch hoge.txt(ファイル名)

ファイルの中身を表示

$ cat ファイル名

文字列を出力する

$ echo hogehoge(出力したい文字列)

今どのサービスが立ち上がっているかプロセスを確認する ←これ結構便利!

$ ps aux | grep ruby(サービス名)

オプションのauxを付ける事でより詳細な情報を表示しています。

(a: all process, u: 実行ユーザーつきで表示, x: 制御端末のないプロセスも表示します)

grepを付けないと膨大な量が表示されるので、確認したいサービスを|(パイプ)でつないであげると見やすいです。

私の場合は、Postres SQLを立ち上げて、exitせずにターミナルをブチッと閉じてしまうことがよくありまして。いけないね。。

あわわと、再度Posgreを起動!postgres -D /usr/local/var/postgres すると、エラーが出る。。 f:id:Kaorina:20160802104352p:plain

先ほどのpostgresプロセスが残っているぽい。ほんとかな、psコマンドで確認。 f:id:Kaorina:20160802104400p:plain

やっぱり残っていた。

kill コマンドでプロセスを殺すか、私はpostmaster.pidファイルを削除してしまっています。

rm /usr/local/var/postgres/postmaster.pid

もう一度、psコマンドを打って確認すると。。 f:id:Kaorina:20160802104407p:plain

終了してた! また、自分が打っているgrepコマンドを結果に出したくない場合は、更におしりに | grep -v grep を付けると出ません

(rmで削除した場合、30秒くらい待った方がいいです) なので、新たな気持ちで起動して下さい!

deviseの招待機能を使って、登録時に氏名も登録できるようにする

deviseを使って招待機能(Invitable)を使う際、招待メールの内のリンク先でデフォルトはPasswordのみを登録するのですが、氏名も一緒に登録させたいというお題が出たのでやってみた。
任意の項目を追加する場合は使える場合のお話です。

イメージ

1. rails cで招待したいemailを追加
User.invite!(email: "自分のEmail")
2. 招待メールが送信される(下記はletter openerを利用)

f:id:Kaorina:20160722151055p:plain

3. 「招待を承認する」からリンクした登録画面。

f:id:Kaorina:20160722150921p:plain
ここで入力した内容がuserテーブルのnameカラムへ登録される。

やったこと

1. devise, Invitableを使えるようにする

下記URLを参考に 1〜5. Controllerを作る、 7.routingを設定する まで進める

Railsで、deviseとdevise_invitableをつかって招待機能を実装する - Qiita


2. 氏名用のカラムを追加
rails generate migration AddColumnToUsers name:string

migrationファイルが作成され、問題なければmigration実行。

rake db:migrate
3. :name を許可するためにStrong Parametersを修正

これをしないとnameがスルーされて登録されない。

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?
  
  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:accept_invitation) << :name #招待を承認時用
    devise_parameter_sanitizer.for(:account_update) << :name  #アカウントの更新時用
  end
end


deviseのバージョンが4.0以上の場合はpermitを使った書き方ができるぽい!

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
  end
end

参考URL: https://github.com/plataformatec/devise#strong-parameters


4. viewを修正

name部分を追加

app/views/devise/invitations/edit.html.erb

<div class="login-area">
  <%= image_tag "logo.png" %>

  <%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => { :method => :put } do |f| %>
    <%= devise_error_messages! %>
    <%= f.hidden_field :invitation_token %>

    <!-- この部分を追加 -->
  <div class="field">
      <%= f.text_field :name, autofocus: true, autocomplete: "off", class: "form-control", placeholder: "氏名(本名)を入力してください" %>
    </div>
   <!-- ここまで -->

    <div class="field">
      <br>
      <%= f.password_field :password, autofocus: true, autocomplete: "off", class: "form-control", placeholder: "NEW PASSWORD" %>
    </div>

    <div class="field">
      <br>
      <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control", placeholder: "CONFIRM NEW PASSWORD" %>
    </div>

    <div class="actions">
      <br>
      <%= f.submit t("devise.invitations.edit.submit_button"), class: "btn btn-info btn-block" %>
    </div>
  <% end %>
</div>
5.(必要であれば)usersモデルにバリデーションを追加しておく

app/models/user.rb

class User < ActiveRecord::Base

  devise :invitable, :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable

  --- 中略 ---

  validates :name, presence: true, length: { minimum: 2 }
end

これで出来たよ!