うまとま君の技術めも

2015年新卒入社した社畜の勉強内容などなど

UbuntuにMySQLをインストール

環境

mysqlをインストール

まずはインストールされるバージョンを確認
まだ5.6は登録されていないみたいですね。

$ sudo apt-get update
$ apt-cache show mysql-server | grep Version
Version: 5.5.37-0ubuntu0.12.04.1
Version: 5.5.22-0ubuntu1

aptでインストール

$ sudo apt-get install mysql-server
$ mysql --version
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2

設定

設定ファイルはバックアップしておきましょう

$ cd /etc/mysql
$ cp my.cnf my.cnf.org

文字コードなどを設定

$ sudo vi my.cnf

下記を追記

[client]
default-character-set = utf8

[mysqld]
skip-character-set-client-handshake
character-set-server  = utf8
collation-server      = utf8_general_ci
init-connect          = SET NAMES utf8

設定を反映させるためmysqlを再起動

$ sudo service mysql restart

mysqlにログイン

$ mysql -u root -p

ステータスをチェック

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2

Connection id:          37
Current database:    
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.5.37-0ubuntu0.12.04.1 (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 19 min 17 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 171  Flush tables: 1  Open tables: 41  Queries per second avg: 0.096
--------------

起動、停止、再起動

$ sudo service mysql start
$ sudo service mysql stop
$ sudo service mysql restart

プロセスの確認

$ ps aux | grep mysqld
mysql    1461  0.0  4.2 492564 42912 ?        Ssl  06:40   0:00 /usr/sbin/mysqld
hoge     3372  0.0  0.0  14572   948 pts/0    S+   06:51   0:00 grep --color=auto mysqld

MySQLGUIで管理

$ sudo apt-get install mysql-workbench

参考

Nginx, Unicornで作るRailsアプリ

環境

Railsアプリ

Railsはインストール済みとする。

とりあえず適当にプロジェクトの作成

$ rails new blog

nginxのインストール

aptでnginxの公式リポジトリを使うように設定する。

$ sudo vi /etc/apt/sources.list.d/nginx.list

nginx.listに下記を追記

deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx

PGP公開鍵を追加する必要があるらしい

$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

インストール可能なバージョンを確認

$ sudo apt-get update
$ apt-cache show nginx | grep Version
Version: 1.4.7-1~precise  ## 最新のバージョンが確認できればおk
Version: 1.1.19-1ubuntu0.6
Version: 1.1.19-1ubuntu0.5
Version: 1.1.19-1

nginxのインストール

$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.4.7

nginxの設定
/etc/nginx/conf.d/default.conf

upstream backends {
    server 127.0.0.1:3000;
}

server {
   listen 80;
    server_name localhost;

    location / {
        if (-f $request_filename) { break; }
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://backends;
    }
}

Unicornのインストール

Gemfileにunicornを追加

gem 'unicorn'

bundleでサクッとインストール

$ bundle install

設定ファイルの作成
config/unicorn.rb

# config:utf-8
# unicorn.rb

# process count
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 4)

# 15秒でWorkerをkillしてタイムアウト
timeout 15

# trueにしておくとダウンタイムが発生しないらしい
preload_app true

# 使用するポート番号を指定
listen 3000

# Capistranoを使うときに設定
pid "/path/to/rails/tmp/pids/unicorn.pid"

# ログの設定
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])

before_fork do |server, worker|
    old_pid = "#{server.config[:pid]}.oldbin"
    if File.exists?(old_pid) && server.pid != old_pid
        begin
            Process.kill("QUIT", File.read(old_pid).to_i)
        rescue Errno::ENOENT, Errno::ESRCH

        end
    end

    defined?(ActiveRecord::Base) and
        ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
    Signal.trap 'TERM' do
        puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
    end

    defined?(ActiveRecord::Base) and
        ActiveRecord::Base.establish_connection
end

def rails_root
    require "pathname"
    Pathname.new(__FILE__) + "../../"
end

taskの作成
lib/tasks/unicorn.rake

namespace :unicorn do

    # Tasks

    desc "Start unicorn"
    task(:start) {
        config = rails_root + "config/unicorn.rb"
        env = ENV['RAILS_ENV'] || "development"
        sh "bundle exec unicorn_rails -D -c #{config} -E #{env}"
    }

    desc "Stop unicorn"
    task(:stop) { unicorn_signal :QUIT }

    desc "Resta unicorn with USR2"
    task(:restart) { unicorn_signal :USR2 }

    desc "Increment number of worker processes"
    task(:increment) { unicorn_signal :TTIN }

    desc "Decrement number of worker processes"
    task(:decrement) { unicorn_signal :TTOU }

    desc "Unicorn pstree (depends on pstree command)"
    task(:pstree) do
        sh "pstree '#{unicorn_pid}'"
    end


    # Helpers

    def unicorn_signal signal
        Process.kill signal, unicorn_pid
    end

    def unicorn_pid
        begin
            File.read(rails_root + "tmp/pids/unicorn.pid").to_i
        rescue Errno::ENOENT
            raise "Unicorn doesn't seem to be running"
        end
    end

    def rails_root
        require "pathname"
        Pathname.new(__FILE__) + "../../../"
    end

end

unicorn起動

$ rake unicorn:start

動作確認

http://localhost/ にアクセスできればおk

その他

参考

間違えてユーザーの所属グループを上書きしてしまった時

環境

所属グループが消えとるんだが(;´Д`)

よしhogeユーザーをnewgrpグループに追加しようと思い、下記コマンドを実行した

$ usermod -G newgrp hoge

その後に、sudoを使ったら何故かpermission denyとか言って怒られる。
何故だろうと思い$ id -aで所属グループを確認したらnewgrp以外消えとるんだが(;´Д`)

どうやら$ usermod -G ...だとグループの追加ではなく上書きで変更するらしい。
そんな事知らずに今まで使ってたんだが…

そんな訳で、一旦recovery modeでログイン
最初に登録されていたグループ一覧は

$ cat /etc/group- | grep hoge

で確認できるはず。

$ mount -o rw,remount /  ## これをしとかないと次のコマンドを実行できないよ
$ usermod -G adm,cdrom,...,plugdev hoge

これで、グループが元に戻せるはず。

ユーザーの所属グループを追加したいとき

$ gpasswd -a hoge newgrp

これでいけるらしい。

参考

初めてのRuby on Rails

目的

Railsをインストールして動作確認する

環境

環境の確認

$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

$ gem -v
2.2.2

Railsのインストール

Gemを使ってRailsをインストール

$ gem install rails
$ rbenv rehash  ## rbenvを使っているので更新を反映
$ rails -v
Rails 4.0.4

Railsアプリケーション

Railsアプリを新規作成しサーバーを起動する。
ちゃんと起動できていれば http://localhost:3000/ にページが表示されるはず。

$ rails new blog
$ cd blog
$ rails server  ## サーバー起動

参考

Macでシステム情報を確認する方法

Linuxでは /proc/cpuinfo とかを見ればシステム情報がわかるが、
Macでシステム情報を見たいときは system_profiler コマンドを使えばいいらしい

ハードウェア情報が見たいときはこんな感じ

$ system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro11,1
      Processor Name: Intel Core i5
      Processor Speed: 2.4 GHz
      Number of Processors: 1
      Total Number of Cores: 2
      L2 Cache (per Core): 256 KB
      L3 Cache: 3 MB
      Memory: 8 GB
      Boot ROM Version: MBP111.0138.B03
      SMC Version (system): 2.16f58
      Serial Number (system): ABCDEFGHIJKL
      Hardware UUID: AAAAAAAA-BBBB-CCCC-3939-DDDDDDDDDDDD

取得できる情報一覧

$ system_profiler -listDataTypes
Available Datatypes:
SPParallelATADataType
SPUniversalAccessDataType
SPApplicationsDataType
SPAudioDataType
SPBluetoothDataType
SPCameraDataType
SPCardReaderDataType
SPComponentDataType
SPDeveloperToolsDataType
SPDiagnosticsDataType
SPDisabledSoftwareDataType
SPDiscBurningDataType
SPEthernetDataType
SPExtensionsDataType
SPFibreChannelDataType
SPFireWireDataType
SPFirewallDataType
SPFontsDataType
SPFrameworksDataType
SPDisplaysDataType
SPHardwareDataType
SPHardwareRAIDDataType
SPInstallHistoryDataType
SPNetworkLocationDataType
SPLogsDataType
SPManagedClientDataType
SPMemoryDataType
SPNetworkDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrefPaneDataType
SPPrintersSoftwareDataType
SPPrintersDataType
SPConfigurationProfileDataType
SPSASDataType
SPSerialATADataType
SPSPIDataType
SPSoftwareDataType
SPStartupItemDataType
SPStorageDataType
SPSyncServicesDataType
SPThunderboltDataType
SPUSBDataType
SPNetworkVolumeDataType
SPWWANDataType
SPAirPortDataType

rbenvで作るRuby開発環境 for Mac OS X

目的

Macに複数バージョンのRubyを入れる

環境

  • OS X 10.9.2
  • Homebrew 0.9.5

デフォルトで入ってるRubyの確認

$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]

Homebrew

Mac OS X 用のパッケージ管理ソフト
今回はこれを使ってRuby等をインストールしていく

インストール方法

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

homebrew

rbenv

Rubyの環境切り替えツール

インストール方法

$ brew install rbenv ruby-build

パスの追加

## ~/.bash_profile に追加
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

profileを再読み込み

$ source ~/.bash_profile

Rubyのインストール

$ rbenv install -l  ## インストール可能なRuby一覧表示
$ rbenv install 2.0.0-p451  ## ちょっと時間かかる(;´Д`)ハァハァ
$ rbenv install 2.1.0
$ rbenv install 2.1.1
$ rbenv rehash
$ rbenv versions ## インストール済みのRuby一覧表示
* system (set by /Users/owner/.rbenv/version)
2.0.0-p451
2.1.0
2.1.1

Rubyの切り替え

指定ディレクトリ内での切り替え

$ rbenv version
system (set by /Users/owner/.rbenv/version)
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]

$ rbenv local 2.1.1
2.1.1 (set by /Users/owner/workplace/.ruby-version)
$ ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

rbenv
eval


とりあえずRubyの切り替えができるようになったのでおk?

Gemも環境別に設定できたほうがいいと思うが
Gemに関してはよく分かってない、というかRuby自体よく分かってないので
そこら辺は保留に・・・

参考

http://m-tkg.hatenadiary.jp/entry/2013/12/06/180650
http://qiita.com/emadurandal/items/a60886152a4c99ce1017

Markdown

Markdown

Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。

Wikipedia:Markdown

Elements

  • Block Elements
    • Paragraph and Line Breaks
    • Headers
    • Blockquotes
    • Lists
    • Code Blocks
    • Horizontal Rules
  • Span Elements
    • Links
    • Emphasis
    • Code
    • Images
  • Miscellaneous
    • Backslash Escapes
    • Automatic Links

Paragraph and Line Breaks

段落は1つ以上の空行によって区切られる連続したテキストである。
(スペースやタブしか含まれない行は空白としてみなされる)

改行<br/>を挿入したい時は行末に2つ以上のスペースを記述すればよい。
Markdownでは\nが改行に自動的に変換されるのではなく、明示的に改行を記述する必要がある。

Headers

MarkdownではSetextとatxの2タイプのヘッダーの表現方法をサポートしている。

Setext-styleのヘッダーは等号(=)とダッシュ(-)を使用したものである。
( = や - の数はいくつでもおk)

H1 Header  
=========  

H2 Header  
---------

H1 Header

H2 Header

Atx-styleのヘッダーはH1~H6のヘッダーに対応し、1~6個のハッシュ記号(#)で表現する。

# H1 Header
## H2 Header
### H3 Header
#### H4 Header
##### H5 Header
###### H6 Header

H1 Header

H2 Header

H3 Header

H4 Header

H5 Header
H6 Header

また、オプションとしてatx-styleを閉じるときにハッシュ記号を記述してもよい。
(閉じるときのハッシュ記号の数に特に指定はない)

# H1 Header #
#### H4 Header ###########

H1 Header

H4 Header

Blockquotes

Markdownではemail-style > 記号を使用して引用を表現する。
メールで返信するときに > 記号を用いて本文を引用するのと同じような感じ。

> この文章を引用します。  
> 2行目はここです。  
>
> ### Markdownを使用することもできる
>
>     echo "Hello World";
>
> > Blockquoteを入れ子にすることもできる

この文章を引用します。
2行目はここです。

Markdownを使用することもできる

echo "Hello World";

Blockquoteを入れ子にすることもできる

Lists

Markdownでは順序ありのリストと順序なしのリストをサポートしている。

順序なしのリストは *, +, - 記号を使用して表現する。

* red
* blue
* green

----------

1. red
2. green
3. blue
4. black
5. white

----------

* red
  - crimson
  - pink
* blue
  + skyblue
* green

----------

* pタグで囲まない
* pタグで囲まない

----------

* pタグで囲む

* pタグで囲む
  • red
  • blue
  • green

  1. red
  2. green
  3. blue
  4. black
  5. white

  • red
    • crimson
    • pink
  • blue
    • skyblue
  • green

  • pタグで囲まない
  • pタグで囲まない

  • pタグで囲む

  • pタグで囲む

Code Blocks

<pre>タグと<code>タグでcode blockを囲む。 code blockを生成するには4つ以上のスペース又はタブで字下げを行う。

    echo "This is a code block";
echo "This is a code block";

Horizontal Rules

3つ以上の -, *, _ のみで行を記述することで<hr/>タグを表現することができる。

* * *

***

*****

- - -

---------------------------------------





Links

Markdownではinlineとreferenceの2タイプのリンクの表現方法をサポートしている。 両スタイルにおいてリンクは[]で区切られている。

inline-style [うまとま君の技術めも](http://umatomakun.hatenablog.com/ "タイトル")  
相対アドレス [ファイトだよ!](/entry/2014/04/03/025107)  

reference-style [うまとま君の技術めも][myblog]  

[myblog]: http://umatomakun.hatenablog.com/  "タイトル"  
[google]: http://google.com/ 'Google'
[yahoo]:  http://yahoo.co.jp/ (Yahoo)

inline-style うまとま君の技術めも
相対アドレス ファイトだよ!

reference-style うまとま君の技術めも

Emphasis

*, _ でテキストを囲むことで<em>または<strong>タグを表現することができる。

*em tag - asterisks*  
_em tag - underscore_  

**strong tag - asterisks**  
__strong tag - underscore__  

em tag - asterisks
em tag - underscore

strong tag - asterisks
strong tag - underscore

Code

` でテキストを囲むことでコードを表現することができる。

Use the `echo()` function.  
``コード内ではバッククォートも使える (`) ``  

Use the echo() function.
コード内ではバッククォートも使える (`)

Images

![Alt text](http://cdn-ak.f.st-hatena.com/images/fotolife/u/umatomakun/20140403/20140403204609.png "プロフィール画像")  
![Alt text][image]  

Alt text
Alt text

Automatic Links

URLとメールアドレスは自動リンクを生成するためのショートカットスタイルをサポートしている。

<http://example.com/>  
<a href="http://example.com/">http://example.com/</a>  
<a href="http://example.com/" target="_blank">http://example.com/</a>  
<address@example.com>  

http://example.com/
http://example.com/
http://example.com/
address@example.com

Backslash Escapes

次の文字はバックスラッシュでエスケープ可能。

\ backslash
` backtick
* asterisk
_ underscore
{} curly braces
[] square brackets
() parentheses
# hash mark
+ plus sign
- minus sign (hyphen)
. dot
! exclamation mark

参考

http://daringfireball.net/