rbenv + ruby-build をインスコする(Ubuntu, CentOS)

毎回めんどくせぇ・・・。
最近は anyenv というのが流行っているらしい。

動作確認をした環境

  1. CentOS 7.0

やること

必要なもの入れる

CentOS

sudo yum -y groupinstall "Development Tools"
sudo yum -y install openssl-devel zlib-devel readline-devel mysql-devel sqlite-devel git
# アセットパイプライン処理するのに必要になるので nodejs 入れる
sudo yum -y install epel-release
sudo yum -y install nodejs
# 未検証(たぶんこれ)
sudo yum -y install mariadb-server mariadb-devel
# 未検証(たぶんこれ)
sudo yum -y install postgresql-server postgresql-devel

Ubuntu

#sudo apt-get -y install libssl-dev zlib1g-dev libreadline-dev libmysqlclient-dev sqlite3 libsqlite3-dev g++ git curl
sudo apt-get -y install libssl-dev zlib1g-dev libreadline-dev sqlite3 libsqlite3-dev g++ git curl
# アセットパイプライン処理するのに必要になるので nodejs 入れる
sudo apt-get -y install nodejs
# 未検証(たぶんこれ)
sudo apt-get -y install mariadb-server libmariadbd-dev
sudo apt-get -y install postgresql libpq-dev

Git の初期設定

git config --global user.name "Wataru Noguchi"
git config --global user.email "wnoguchi.0727@gmail.com"
git config --global core.editor 'vim -c "set fenc=utf-8"'
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
# required version 1.8.x >=
git config --global push.default simple
git config --global core.precomposeunicode true
git config --global core.quotepath false

rbenv 入れる

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

以下を ~/.bash_profile に追記。

# ~/.bash_profile
export PATH="$HOME/.rbenv/bin:$PATH"
# ~/.bashrc
eval "$(rbenv init -)"
$ . ~/.bashrc
$ type rbenv
rbenv is a function

ruby-build 入れる

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

Ruby をインストールする

  • その前に ~/.gemrc で ri, rdoc がインストールされないようにする
install: --no-document
update: --no-document
$ rbenv install --list
(snip)
  2.2.0
  2.2.1
  2.2.2
  2.2.3
  2.2.4
  2.2.5
  2.2.6
  2.2.7
  2.3.0-dev
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.3.1
  2.3.2
  2.3.3
  2.3.4
  2.4.0-dev
  2.4.0-preview1
  2.4.0-preview2
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.4.1
  2.5.0-dev

2.4.1 入れるか。

$ rbenv install 2.4.1
$ rbenv global 2.4.1
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
$ rbenv rehash
$ rbenv exec gem install bundler --no-document
Fetching: bundler-1.10.6.gem (100%)
Successfully installed bundler-1.10.6
1 gem installed
$ bundle --version
Bundler version 1.15.4

ワンライナー

➜  ~ rbenv install 2.4.1 && rbenv global 2.4.1 && rbenv exec gem install bundler
Downloading ruby-2.4.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.bz2
Installing ruby-2.4.1...
Installed ruby-2.4.1 to /home/wnoguchi/.rbenv/versions/2.4.1

Fetching: bundler-1.15.4.gem (100%)
Successfully installed bundler-1.15.4
1 gem installed

References

  1. sstephenson/rbenv
  2. sstephenson/ruby-build
  3. rbenv and rails environement one shot install script.
  4. Linux – Gitをインストールしたら真っ先にやっておくべき初期設定 – Qiita

Devise と Bootstrap の併用について

以下がとても参考になる。

Bootstrap は頭から抜けかけてるので以下で復習する。

そうすると Devise の準備ができた時のナビゲーションバーは以下の様な記述になる。

見た目は

f:id:wnoguchi0727:20141218234456p:plain

f:id:wnoguchi0727:20141218234508p:plain

な感じ。

      <ul class="nav navbar-nav navbar-right">
<% if user_signed_in? -%>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><%= current_user.email %> <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><%= link_to 'Edit profile', edit_user_registration_path %></li>
<li><%= link_to 'Logout', destroy_user_session_path, method: :delete %></li>
</ul>
</li>
<% else -%>
<li><%= link_to 'Sign up', new_user_registration_path %></li>
<li><%= link_to 'Login', new_user_session_path %></li>
<% end -%>
</ul>

便利!!

Amazon Route53の設定管理ツールのRoadworkerを使ってみた

Amazon Route53をRuby DSL設定ファイルで管理するRuby製のツール。
もちろんDSLで記述されているのでバージョン管理システムとの相性も抜群です。

環境

インストール

Gemfile

僕はGemfileを用意します。

source "https://rubygems.org"
gem 'roadworker'

そして

$ bundle install --path ~/vendor/bundle
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using json (1.8.1)
Using mini_portile (0.5.2)
Using nokogiri (1.6.0)
Using uuidtools (2.1.4)
Installing aws-sdk (1.29.1)
Using systemu (2.5.2)
Installing macaddr (1.6.1)
Installing net-dns (0.8.0)
Installing tins (0.13.1)
Installing term-ansicolor (1.2.2)
Installing uuid (2.3.7)
Installing roadworker (0.3.10)
Using bundler (1.3.5)
Your bundle is complete!
It was installed into /Users/noguchiwataru/vendor/bundle

特にhomebrewでインストールするパッケージが必要なわけでもなくインストールできました。

$ bundle exec roadwork --version
roadwork 0.3.10

使う

当然ですが、AWS APIアクセスのためのアクセスキーに関する環境変数が事前にセットアップされている必要があります。

export AWS_ACCESS_KEY_ID='...'
export AWS_SECRET_ACCESS_KEY='...'

初期設定

Routefileに現在管理されている Hosted Zone の設定を出力する。

$ bundle exec roadwork -e -o Routefile
Export Route53 to `Routefile

中身はどうなっているか

RubyのDSLになっています。

hosted_zone "example.com." do
rrset "example.com.", "A" do
ttl 300
resource_records(
"11.33.99.91"
)
end
rrset "*.example.com.", "A" do
ttl 300
resource_records(
"11.33.99.91"
)
end
rrset "yunocchi.example.com.", "CNAME" do
ttl 300
resource_records(
"hatenablog.com"
)
end
rrset "miyako.example.com.", "A" do
ttl 300
resource_records(
"111.222.333.444"
)
end
rrset "nori.example.com.", "CNAME" do
ttl 300
resource_records(
"domains.tumblr.com"
)
end
end

適用してみる

まずは --dry-run してみる。

$ bundle exec roadwork --dry-run -a -f Routefile
Apply `Routefile` to Route53 (dry-run)
Update ResourceRecordSet: example.com. A (dry-run)
set resource_records=[{:value=>"11.33.99.91"}] (dry-run)
Update ResourceRecordSet: *.example.com. A (dry-run)
set resource_records=[{:value=>"11.33.99.91"}] (dry-run)
No change

問題なければ適用。
2回目の実行ではちゃんと変更なしとなっている。
冪等性ばんざい。

$ bundle exec roadwork -a -f Routefile
Apply `Routefile` to Route53
Update ResourceRecordSet: pg1x.com. A
set resource_records=[{:value=>"11.33.99.91"}]
Update ResourceRecordSet: *.pg1x.com. A
set resource_records=[{:value=>"11.33.99.91"}]
$ bundle exec roadwork -a -f Routefile
Apply `Routefile` to Route53
No change

AWS Management Console上で見てみるとちゃんと適用できている。
すばらしい。

いじわるしてみる

AWS Management Console上でレコードを1行追加してみました。
本来ならRoutefile上で管理するつもりなので、あってはならないことです。
まあ、コンテキストによってはAWS Management Console上で変更したやつはRoutefileにも反映してほしい気もしますが、
そんな虫のいい話はないですね。
なので、ここではRoutefileにないレコードは消えてくれることを期待します。

$ bundle exec roadwork --dry-run -a -f Routefile
Apply `Routefile` to Route53 (dry-run)
Delete ResourceRecordSet: localns.pg1x.com. A (dry-run)
No change

余計な行が増えているよと教えてくれました。
--dry-run を消して適用すればOKです。
AWS Management Console上からはきれいさっぱり消えています。

参考サイト

クラスメソッドさんの説明がとても参考になりました。