文字コード

Go のソースコードは UTF-8 で書くと決まっている。UTF-8 で書いてあれば、日本語も問題なく使える。たとえ Windows でも。

^o^ > go run hello_ja_utf8.go
こんにちは!

UTF-8 以外の文字コード、例えば Shift JIS で書くと次のようにエラーになる。

^o^ > go run hello_ja_sjis.go
# command-line-arguments
.\hello_ja_sjis.go:6: invalid UTF-8 encoding

Hello, world!

気が付けば今月も20日を過ぎている。まずいな。
まあ、いい。日にちが開いてしまってけど、ちょっとずつ Go をやっていこう。

今日は定番の Hello, world プログラムを作った。

Go のプログラムはパッケージから構成される。package 文で宣言する。ここでは main という名前でパッケージを作っている。
Go のプログラムは main パッケージの main 関数がエントリポイントになる。だからプログラムのパッケージ名は main で、main という名前の関数がなければいけない。
関数の定義は func 関数名 で行う。上の例では main 関数だけがある。
import 文は、ライブラリの読み込み。ライブラリ(パッケージ)名をクォートでくくって指定する。ここでは出力のために fmt パッケージを読み込んでいる。
そして、fmt.Println 関数が標準出力への出力。引数の文字列に改行をつけて出力する。

じゃあ、実行してみよう。

^o^ > go run hello.go
Hello, world!

今日はここまで。

Go言語のインストール

気が付けば夏休みも最終日だ。このままでは今月ブログの更新なしになってしまうところだ。
大したネタもないので、Go 言語のインストールのことでも書いておこう。ダウンロードはここから。

 cf. https://golang.org/dl/

Windows 用には msi インストーラがあるので、それをダウンロードして実行するだけ。すごく簡単。

Go言語に手を出した

Elixir は先月うまくいかなくてめげてしまったので、ここ最近は Go 言語に手を出している。ま、Web ページを見ながら見様見真似でやってるんだけど、言語の雰囲気はなんとなくわかったってところかな。OS ネイティブの実行ファイルが作れるのはいいね。ツールを作って他人に配るのにはいい。goroutine はよくわかんない。

で、ちょっと整数の素因数分解をするプログラムを作ってみた。

コンパイルせずにそのまま実行するには go run コマンド。

^o^ > go run primefactors.go 12345
3 5 823

コンパイルするには go build コマンド。

^o^ > go build primefactors.go

^o^ > ls
primefactors.exe  primefactors.go

^o^ > primefactors 12345
3 5 823

さくらのVPSプラン乗り換え計画(14)

WordPress を旧サーバから移行する。

下準備

旧サーバから新サーバへ、データを移動しておく。Wordpress のデータをディレクトリごと tar でまとめて、データベースは mysqldump で出力した。

ユーザとデータベースを作成

WordPress 用のユーザとデータベースを作成。

[takatoh@tk2-254-36564 ~]$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 46
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'xxxxxxxx';
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE DATABASE wpdb;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL ON wpdb.* TO 'wordpress'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

データベースにデータを復元

今作ったデータベースにデータを復元する。

[takatoh@tk2-254-36564 ~]$ mysql -u wordpress -p wpdb < wpdb.sql
Enter password:

WordPressのデータを展開

tar で固めておいた WordPress のデータ一式を /var/www/wordpress に展開する。

[takatoh@tk2-254-36564 ~]$ cd /var/www
[takatoh@tk2-254-36564 www]$ sudo cp ~/wordpress.tgz .
[sudo] password for takatoh: 
[takatoh@tk2-254-36564 www]$ sudo tar xzf wordpress.tgz
[takatoh@tk2-254-36564 www]$ ls
cgi-bin  error  html  icons  lathercraft  wordpress  wordpress.tgz

Nginxにバーチャルホストの設定

/etc/nginx/conf.d/blog2.lathercraft.net.conf ファイルを作る。

で、ログファイル用のディレクトリを作ったら Nginx をリスタート。

[takatoh@tk2-254-36564 conf.d]$ sudo service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

名前解決のためにゾーン編集

さくらのゾーン編集のページで、blog2.lathercraft.net を登録する。

確認

さて、これで OK のはず。ブラウザで確認してみよう。
OK、大丈夫のようだ。

[追記]

しばらく様子を見ていたけど、大丈夫のようなので、blog2.lathercraft.net ではなく blog.lahtercraft.net でアクセスできるように変更した。

これで VPS プラン乗り変え計画は全て完了した。

さくらのVPSプラン乗り換え計画(13)

PHP をインストールする。

[takatoh@tk2-254-36564 ~]$ sudo yum install php-cli php-mysql php-common php php-cgi php-fpm php-dg php-mbstring

「パッケージ php-dg は利用できません。」て出たけど、php-dg って確か画像処理のライブラリだよな。たぶん画像使わないからいいか。
インストールの確認。

[takatoh@tk2-254-36564 ~]$ php -v
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

設定ファイルを編集。

[takatoh@tk2-254-36564 ~]$ sudo cp /etc/php.ini /etc/php.ini.orig
[takatoh@tk2-254-36564 ~]$ sudo vi /etc/php.ini

エラーログの場所を変更。

日本語の設定。

http_input。

detect_order。

expose_php を Off に。

最後にタイムゾーン。

php-fpm の設定。
設定ファイルは /etc/php-fpm.d/www.conf。
使用するポート。デフォルトのまま。

許可するクライアントの IP アドレス。これも localhost だけなのでデフォルト。

php-fpm サービスの実行ユーザとグループ。nginx としたので、あとで作る。

php-fpm のプロセス数を定量にする。

最大子プロセス数の設定。

php-fpm が受け付ける最大要求数。これを超えると子プロセスが再起動する。

これで編集は終了。
実行ユーザを nginx としたので作る。

[takatoh@tk2-254-36564 ~]$ sudo useradd nginx
[sudo] password for takatoh: 
useradd: ユーザ 'nginx' は既に存在します

あれ、あった。
じゃあ、php-fpm を起動。ついでに自動起動するように設定。

[takatoh@tk2-254-36564 ~]$ sudo /etc/init.d/php-fpm start
php-fpm を起動中:                                          [  OK  ]
[takatoh@tk2-254-36564 ~]$ sudo chkconfig php-fpm on
[takatoh@tk2-254-36564 ~]$ sudo chkconfig --list php-fpm
php-fpm        	0:off	1:off	2:on	3:on	4:on	5:on	6:off

よし、最後にテストしてみよう。Nginx のデフォルトのデータ置き場が /usr/share/nginx/html になってるので、そこに phpinfo.php ファイルを置く。

これでブラウザでアクセスしてみると……あれ?ダメだ。
そうか。Nginx に PHP 用の設定をしてないからか。デフォルトの設定ファイルに追記。

これでどうだ!
OK。ちゃんと表示された。

[追記]

インストールできなかった php-dg、dg じゃなくて gd だった。php-gd。
ま、どっちにしろいいか。

[更に追記]

とりあえず、php-gd もインストールしておいた。

さくらのVPSプラン乗り換え計画(12)

Rails アプリが無事動くようになったので、旧プランで動いていたアプリを止めた。
で、新プランのアプリに www.lathercraft.net でアクセスできるように設定する。
ひとつは、Nginx の設定ファイル名を変更して再起動。
もうひとつは、さくらインターネットのゾーン編集をして、www.lathercraft.net が新サーバを指すように変更。
これでいいはずだけど、ブラウザでアクセスしてみると、アプリが動いていない。どうやらまだ名前解決が旧い方を指してるみたいだ。これは時間が経てば解決するはずなので、様子を見ることにする。

さくらのVPSプラン乗り換え計画(11)

Rails アプリを unicorn で動かす。

unicornのインストールと設定

Gemfile に unicorn を追加。

インストール。

[root@tk2-254-36564 lathercraft]# bundle install --path vendor/bundle

unicorn の設定ファイルはつぎのようにした。

/var/run/unicorn ディレクトリを作成。

[root@tk2-254-36564 lathercraft]# mkdir /var/run/unicorn

Nginxの設定

ログファイル用のディレクトリを作成。

[root@tk2-254-36564 lathercraft]# mkdir /var/log/nginx/www.lathercraft.net

Nginxの再起動とunicornの起動

Nginx を再起動。

[root@tk2-254-36564 lathercraft]# service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

unicorn を起動。

[root@tk2-254-36564 lathercraft]# export SECRET_KEY_BASE=bundle exec rails secret
[root@tk2-254-36564 lathercraft]# bundle exec unicorn_rails -c unicorn.rb -E production
I, [2017-05-05T11:58:43.619697 #13435]  INFO -- : Refreshing Gem list
DEPRECATION WARNING: The configuration option config.serve_static_assets has been renamed to config.serve_static_files to clarify its role (it merely enables serving everything in the public folder and is unrelated to the asset pipeline). The serve_static_assets alias will be removed in Rails 5.0. Please migrate your configuration files accordingly. (called from block in  at /var/www/lathercraft/config/environments/production.rb:23)
I, [2017-05-05T11:58:46.475292 #13435]  INFO -- : listening on addr=/var/run/unicorn/unicorn_lathercraft.sock fd=10
I, [2017-05-05T11:58:46.475781 #13435]  INFO -- : worker=0 spawning...
I, [2017-05-05T11:58:46.479485 #13435]  INFO -- : worker=1 spawning...
I, [2017-05-05T11:58:46.481100 #13438]  INFO -- : worker=0 spawned pid=13438
I, [2017-05-05T11:58:46.481436 #13435]  INFO -- : master process ready
I, [2017-05-05T11:58:46.481630 #13438]  INFO -- : worker=0 ready
I, [2017-05-05T11:58:46.482935 #13441]  INFO -- : worker=1 spawned pid=13441
I, [2017-05-05T11:58:46.483183 #13441]  INFO -- : worker=1 ready

さて、これでいいはず。

名前解決

ちゃんと動いているはずだけど、確認するには www2.lathercraft.net の名前解決化できないといけない。これはさくらインターネットのゾーン編集をする。

……結果、無事動いていることを確認。

unicornの自動起動

最後に、OS起動時に unicorn が自動起動するようにしておく。/etc/init.d/unicorn_lathercraft をつぎのようにした。

これでいいはず。スタートしてみよう。

[root@tk2-254-36564 init.d]# chmod 755 unicorn_lathercraft
[root@tk2-254-36564 init.d]# service unicorn_lathercraft start

OK。
自動起動するように設定。

[root@tk2-254-36564 init.d]# chkconfig unicorn_lathercraft on
[root@tk2-254-36564 init.d]# chkconfig --list unicorn_lathercraft
unicorn_lathercraft	0:off	1:off	2:on	3:on	4:on	5:on	6:off

これで完了。

さくらのVPSプラン乗り換え計画(10)

新しいプランのサーバで Rails アプリが一応動くようになったので、旧プランのサーバからデータを移行する。

まずは mysqldump コマンドで旧プランのデータベースを取り出す。

[takatoh@www2465uo ~]$ mysqldump -u lathercraft -p lathercraft_production > lcp-20170505.sql
[takatoh@www2465uo ~]$ tar czf lcp-20170505.sql.tgz lcp-20170505.sql

ファイルをローカルにダウンロード。

takatoh@envelopes $ scp -P xxxxx takatoh@www.lathercraft.net:lcp-20170505.sql.tgz .
lcp-20170505.sql.tgz                          100%   10MB  10.1MB/s   00:01

ダウンロードしたファイルを新プランのサーバにアップロード。

takatoh@envelopes $ scp -P 60000 lcp-20170505.sql.tgz takatoh@160.16.224.68:
lcp-20170505.sql.tgz                          100%   10MB  10.1MB/s   00:01

新プランのサーバにログインして、.tgz ファイルを展開。

takatoh@envelopes $ ssh -p 60000 takatoh@160.16.224.68
Last login: Fri May  5 11:06:46 2017 from fntsitm001026.sitm.fnt.ngn.ppp.infoweb.ne.jp

SAKURA Internet [Virtual Private Server SERVICE]

[takatoh@tk2-254-36564 ~]$ ls
lcp-20170505.sql.tgz
[takatoh@tk2-254-36564 ~]$ tar xzf lcp-20170505.sql.tgz
[takatoh@tk2-254-36564 ~]$ ls
lcp-20170505.sql  lcp-20170505.sql.tgz

データベースにリストアする。

[takatoh@tk2-254-36564 ~]$ mysql -u lathercraft -p lathercraft_production < lcp-20170505.sql
Enter password:

アプリを立ち上げて確認。

[root@tk2-254-36564 lathercraft]# export SECRET_KEY_BASE=bundle exec rake secret
[root@tk2-254-36564 lathercraft]# bundle exec rails s -e production -b 0.0.0.0
=> Booting WEBrick
=> Rails 4.2.8 application starting in production on http://0.0.0.0:3000
=> Run rails server -h for more startup options
=> Ctrl-C to shutdown server
DEPRECATION WARNING: The configuration option config.serve_static_assets has been renamed to config.serve_static_files to clarify its role (it merely enables serving everything in the public folder and is unrelated to the asset pipeline). The serve_static_assets alias will be removed in Rails 5.0. Please migrate your configuration files accordingly. (called from block in  at /var/lathercraft/config/environments/production.rb:23)
[2017-05-05 11:18:51] INFO  WEBrick 1.3.1
[2017-05-05 11:18:51] INFO  ruby 2.3.3 (2016-11-21) [x86_64-linux]
[2017-05-05 11:18:51] INFO  WEBrick::HTTPServer#start: pid=12500 port=3000

ブラウザでも確認出来てOK。

ところでうえで気がついたんだけど、アプリを /var/www/lathercraft 以下に置くつもりが /var/lathercraft 以下においてしまっている。なので移動する。

[root@tk2-254-36564 var]# cp -r -a lathercraft www/lathercraft
[root@tk2-254-36564 var]# cd www/lathercraft
[root@tk2-254-36564 lathercraft]# ls
Gemfile       README.rdoc  app  config     db   log     test  vendor
Gemfile.lock  Rakefile     bin  config.ru  lib  public  tmp

再度アプリを立ち上げて確認。

[root@tk2-254-36564 lathercraft]# bundle exec rails s -e production -b 0.0.0.0

OK。