プログラミングガール

Developing a better me

CentOS|SSHログイン時にアスキーアートを表示する

なにがしたい

sshでサーバにログインした時に、AAを表示することでどのサーバにログインしたかをわかりやすくしたい。

HOW TO

1.AAを作成

Text to ASCII Art Generator (TAAG)

2./etc/motdに上記で作成したAAを記述

______              _            _   _             
| ___ \            | |          | | (_)            
| |_/ / __ ___   __| |_   _  ___| |_ _  ___  _ __  
|  __/ '__/ _ \ / _` | | | |/ __| __| |/ _ \| '_ \ 
| |  | | | (_) | (_| | |_| | (__| |_| | (_) | | | |
\_|  |_|  \___/ \__,_|\__,_|\___|\__|_|\___/|_| |_|
                                                   
Production 本番                                                   

3.試してみる

$ ssh production

Last login: Wed Jul 13 15:41:47 2016 from 172.16.100.15
______              _            _   _             
| ___ \            | |          | | (_)            
| |_/ / __ ___   __| |_   _  ___| |_ _  ___  _ __  
|  __/ '__/ _ \ / _` | | | |/ __| __| |/ _ \| '_ \ 
| |  | | | (_) | (_| | |_| | (__| |_| | (_) | | | |
\_|  |_|  \___/ \__,_|\__,_|\___|\__|_|\___/|_| |_|
                                                   
Production 本番 

イエイ!


くれぐれも「STGと間違って本番にデプロイしちゃった☆」みたいなことがないようにしましょう!

Rails|Emailのバリデーション

背景

はじめはemail_validatorを使用していたのですが、
「hogehoge@hoge.com」のように入力された時、うまくバリデーションがかからなく・・・。
あらためて調べてみると、以下の場合はうまくバリデーションがかかっていないようでした。

  • 先頭に半角/全角スペース許容してる
  • 全角を許容してる

うーむ、困った。


解決方法

1.email_validatorに代わってvalidates_email_format_ofを使用する

github.com

  • @前は64文字以内であること
  • 全角は弾く
  • 先頭/email中/末尾の全角スペースは弾く
  • email中の半角スペースは弾く

上記ちゃんとチェックしてくれているようです。


2.先頭/末尾の半角スペースを弾く
バリデーションをかける前に、不要なスペースを排除します。
Stringクラスのstripは前後の空白文字を削除してくれる強いやつ。

class User < ActiveRecord::Base

    before_validation :remove_space

    # バリデーション前に前後の空白文字を削除
    def remove_space
        self.email.strip!
    end

    # validations
    validates_presence_of :email, message: "入力必須です。"
    validates_length_of :email, in: 0..100, message: "100文字以内で入力ください。", if: :email?
    validates :email, :email_format => {:message => '正しいメールアドレスの形式で入力ください。'}

end

iOS開発|Images can't contain alpha channels or transparencies

iTune Connectの画像登録での一コマ

Images can't contain alpha channels or transparencies

↑ iTune Connectの画像登録ででた注意文言

「App Preview and Screenshots」の画像をリサイズして登録しようとしたときに発生。

原因

画像をリサイズした際に、縦横比が変わってしまったせいで発生したもよう。
比率を変えた際に埋めた部分が透過されているよと怒られているようです(詳しく調べてないのでおそらく)。

解決策

PNG形式で保存したため起こった現象なので、JPGで保存し直すことで解決しました。

Rails|レイアウトを新規で作成する

なにがしたい

Viewを表示する際に、「layout.html.erb」とは別のレイアウトを作成して適応したい。

シチュエーション

hana-ori.hatenablog.com

上記の方法でerror画面をカスタマイズすると、Viewに対応するコントローラーがないため、「Template Inheritance※」ができない。
そのため、error画面を出す際、メタ情報や読み込むCSSの内容が変わるためレイアウトを別に用意したい。

※ 例)errors配下に_meta.html.erbを切り、application.html.erb内で以下のように呼び出す。

<%= render partial: 'meta' %>

HOW TO

1.view/layout/error_layout.html.erbを作成
2.application.controllerのエラーページをレンダリングしている箇所で、error_layout.html.erbを指定する

def render_404(exception = nil)
    if exception
      logger.info "Rendering 404 with exception: #{exception.message}"
    end
    render template: "errors/error_404", status: 404, layout: 'application'
    render template: "errors/error_404", status: 404, layout: "error_layout" #error_layout.html.erbを指定する
  end

  def render_500(exception = nil)
    if exception
      logger.info "Rendering 500 with exception: #{exception.message}"
    end
    render template: "errors/error_50x", status: 500, layout: 'application'
    render template: "errors/error_50x", status: 500, layout: "error_layout" #error_layout.html.erbを指定する
  end

Rails|エラーページのカスタマイズ

なにがしたい

エラーページをいい感じにカスタマイズしたい。

HOW TO

1. view配下にerrorsディレクトリを切り、「error_404.html.erb」と「500.html.erb」を作成 2. application_controller.rbに下記を記述

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  rescue_from ActionController::RoutingError, with: :render_404
  rescue_from Exception, with: :render_500

  # 404ページをレンダリング
  def render_404(exception = nil)
    if exception
      logger.info "Rendering 404 with exception: #{exception.message}"
    end
    render template: "errors/error_404", status: 404, layout: 'application'
  end

  # 500ページをレンダリング
  def render_500(exception = nil)
    if exception
      logger.info "Rendering 500 with exception: #{exception.message}"
    end
    render template: "errors/error_50x", status: 500, layout: 'application'
  end
end

3. route.rbの最後に下記を記述 その上に書かれているパス以外のリクエストが来たら、404ページに遷移させます。

 get '*path', to: 'application#render_404'

Vagrant|There are stopped jobs.

困ったこと

vagrantからログアウトしようと思った際、下記の文言がでて、ログアウトできなくなった。

There are stopped jobs.

解決方法

どうやら、vagrantから抜け出す前に、中断中のプロセスをKillする必要があるらしい。

$ ps aux|grep {{ ログイン名 }}
…
vagrant   5694  0.0 24.1 922264 246000 pts/1   Tl   11:35   0:10 /home/vagrant/.rbenv/versions/2.3.0/bin/ruby bin/rails s -b 0.0.0.0
$ kill -9 5694

Rails|Cannot add foreign key constraint エラー対処

困ったシチュエーション

後でマスターテーブルを追加しようとした際、以下のエラーに遭遇。

Mysql2::Error: Cannot add foreign key constraint: ALTER TABLE `application_forms` ADD CONSTRAINT `fk_rails_386b13f566`

え、どういうこと?

原因

マスターテーブルを後から作成したため、以下の順でマイグレートが当たっていた。
しかし、1のentriesテーブルで2のマスタテーブルを参照しているため、叱られていた。

  1. 20160617063944_create_entries.rb
  2. 20160620063943_create_mst_categories.rb

解決方法

マイグレートファイルの名前を修正し、正しい順番でマイグレートが当たるように修正する。

  1. 20160620063943_create_mst_categories.rb
  2. 20160621063944_create_entries.rb