最近よく聞くElixir/Phoenixを使ってみる
Elixirとは
Erland VM上で動作するRubyに似た関数型言語
Phoenixとは
Elixirで実装されたウェブアプリケーションフレームワーク
Railsによく似ている(作者がRailsコミッタでもある)
Railsによく似ている(作者がRailsコミッタでもある)
環境作成
- まずは専用のVagrantを作成
$ vagrant box list
centos6 (virtualbox, 0)
$ vagrant init centos6
Vagrantfileを以下に編集
1. ↓コメントアウト + port:4000をforwardするように修正
2. ↓コメントアウト
1. ↓コメントアウト + port:4000をforwardするように修正
config.vm.network "forwarded_port", guest: 4000, host: 4000
config.vm.network "private_network", ip: "192.168.33.10"
vagrant起動
$ vagrant up
- ssh設定
ssh.configにIPとホスト名の紐付けを行う
$ vagrant ssh-config --host elixir-phoenix >> ~/.ssh/config
ホスト名は
elixir-phoenix
- サーバーにchef-soloインストール
$ knife solo prepare elixir-phoenix
Cookbook作成
- Elixirインストール用Cookbookの作成
$ knife cookbook create elixir -o site-cookbooks
各ファイルを以下内容で作成
Berksfile
source "https://supermarket.chef.io"
cookbook 'elixir', path: 'site-cookbooks/elixir'
metadata.rb
name 'elixir'
maintainer '{name}'
maintainer_email '{name}@gmail.com'
license 'All rights reserved'
description 'Installs/Configures elixir'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version '0.1.0'
depends "git"
depends "github"
depends "erlang"
attributes/default.rb
default['elixir']['version'] = '1.0.5'
default['elixir']['home'] = '/usr/local/elixir'
default['elixir']['link'] = '/usr/local/elixir/bin'
default['elixir']['repo'] = "https://github.com/elixir-lang/elixir.git"
default['elixir']['source']['path'] = '/usr/local/elixir/src'
recipes/default.rb
# install erlang
node.set[:erlang][:install_method] = "source"
node.set[:erlang][:source][:version] = "18.0"
node.set[:erlang][:source][:url] = "http://erlang.org/download/otp_src_#{node[:erlang][:source][:version]}.tar.gz"
node.set[:erlang][:source][:checksum] = "a0b69da34b4f218eb7d63d9e96fc120aa7257bb6c37a0f40fb388e188b4111aa"
include_recipe "erlang::default"
include_recipe "git::default"
# create directory
directory node[:elixir][:home] do
owner 'vagrant'
group 'vagrant'
mode '0755'
action :create
end
# git clone to specified dir
git "elixir" do
repository node[:elixir][:repo]
revision "v#{node[:elixir][:version]}"
destination node[:elixir][:source][:path]
action :sync
end
# make
bash "make" do
cwd node[:elixir][:source][:path]
code "make"
action :run
end
# create symbolic link
link node[:elixir][:link] do
to "#{node[:elixir][:source][:path]}/bin"
end
# setting PATH environment variable
template "/etc/profile.d/elixir.sh" do
mode 0755
source "elixir.sh.erb"
variables(:elixir_home => node[:elixir][:home])
end
※ erlangのotp_src_XXX.tar.gzだが、checksumが公式サイトの
checksumを指定した所
ファイル自体破損してなさそう・・・?仕方ないのでトレースからchecksumをコピーしました
checksumを指定した所
Chef::Exceptions::ChecksumMismatch
が発生ファイル自体破損してなさそう・・・?仕方ないのでトレースからchecksumをコピーしました
- Chef-soloを実行
$ knife solo cook elixir-phoenix
ssh elixir-phoenix
でサーバーへログインInteractive mode(rubyでいうirb)を試してみる
[vagrant@localhost ~]$ iex
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Interactive Elixir (1.0.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 40+2
42
iex(2)> "hello" <> " world"
"hello world"
iex(3)>
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
a
0 件のコメント:
コメントを投稿