railsの環境構築でかなり手間どったのでメモ。
CentOSをインストール
好きなディレクトリで以下を実行
vagrant box add 好きな名前 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
vagrant の設定フォルダを作成
vagrant init 好きな名前
vagrantfileを編集。
20行目config.vm.box_check_update = false 35行目config.vm.network "private_network", ip: "192.168.33.10" 52行目config.vm.provider "virtualbox" do |vb| 57行目vb.memory = "1024" 58行目end
同期フォルダを指定
config.vm.synced_folder ".", "/vagrant"
※注意ポイント /vagrantはvagrant ssh後の/home/vagrantではない。 vagrant ssh後のcd /vagrantを指しています。
vagrant up vagrant ssh
mysqlをインストール
# デジタル署名をインポートする $ sudo rpm --import http://dev.mysql.com/doc/refman/5.7/en/checking-gpg-signature.html # yumリポジトリの設定をインストールする $ sudo rpm -ihv http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm # yumリポジトリをlistする $ yum --disablerepo=\* --enablerepo='mysql57-community*' list available # MySQL Server 5.7をインストールする $ sudo yum --enablerepo='mysql57-community*' install -y mysql-community-server Mysql起動 $ sudo service mysqld start
mysqlに入る
初期のパスワードがあるので、確認。
sudo cat /var/log/mysqld.log | grep "temporary password"
上記のパスワードで入ったらパスワードを再設定。
set password for root@localhost=password('*******');
ただ単にこれでもいけるっぽい。
$ sudo yum install mysql-server
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
こんなエラーが出たら以下のコマンドを打ってみて。
sudo /etc/init.d/mysqld restart
参考: qiita.com
rubyインストール
rbenvインストール
sudo yum install gcc make openssl-devel libffi-devel readline-devel git git clone https://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile exec $SHELL -l
ruby-buildインストール
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build rbenv install --list(インストールリスト確認)
rubyインストール
rbenv install 好きなバージョン
BUILD FAILED (CentOS release 6.7 (Final) using ruby-build 20170405-4-g365d)
上記のようなエラーが出てきたら以下を実行。
sudo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm
sudo vi /etc/yum.repos.d/city-fan.org.repo enabled=1を以下のように編集。 enabled=0
sudo yum update --enablerepo=city-fan.org libcurl
再度rbenv install (好きなバージョン)を行う。
rbenv install 好きなバージョン
それでもまだ以下のようなエラーが出る場合。
BUILD FAILED (CentOS release 6.7 (Final) using ruby-build 20170405-6-gc7a4f34)
以下を実行
sudo yum install -y openssl-devel readline-devel zlib-devel` 再度rbenv install 好きなバージョン
rbenv global(or local) 好きなバージョン
rails5インストール
gem install bundler #bundlerのインストール
gem install rails
rbenv rehash
railsプロジェクト作成
vagrantで共有したいのでvagrantfileで指定した共有ディレクトリに作成。
cd /vagrant rails new testtest -d mysql(今回はmysqlを使う)
以下の様なエラーが出た場合
An error occurred while installing mysql2 (0.4.6), and Bundler cannot continue. Make sure that gem install mysql2 -v '0.4.6' succeeds before bundling.
以下を実行
sudo yum install mysql-devel
インストールしたら、railsプロジェクトに移動し、bundle install。
cd testtest bundle
データベース作成
mysqlパスワード確認
grep -e 'A temporary password is generated for root@localhost' /var/log/mysqld.log
ログイン後パスワード変更
set password for root@localhost=password('*******');
database.ymlを編集
default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: ********
データベース作成
rake db:create
それでも以下のエラーが出たら、vagrant reload してみましょう。
Mysql2::Error: Access denied for user 'root'@'localhost'
unicornインストール
以下のコメントアウトを外す。 # gem 'therubyracer', platforms: :ruby これをしないとuglifierというgemがなんたらかんたらというエラーが出るはず。 unicornを追加 gem 'unicorn' bundle
unicorn.rbを作成
config/unicorn.rbを作成しよう。 中身は以下のように。
@app_path = '/vagrant/testtest' # 自分の作ったrailsプロジェクトがあるパスを指定。 worker_processes 2 working_directory "#{@app_path}/" # This loads the application in the master process before forking # worker processes # Read more about it here: # http://unicorn.bogomips.org/Unicorn/Configurator.html preload_app true timeout 30 # This is where we specify the socket. # We will point the upstream Nginx module to this socket later on listen "/tmp/unicorn.sock", :backlog => 64 pid "/tmp/unicorn.pid" # Set the path of the log files inside the log folder of the testapp stderr_path "#{@app_path}/log/unicorn.stderr.log" stdout_path "#{@app_path}/log/unicorn.stdout.log" before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end sleep 1 end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end
参考URL
以下コマンドでunicorn起動。
bundle exec unicorn_rails -c config/unicorn.rb
unicornのコマンド色々あってよくわからん。上記だと起動したままになるっぽい。
unicorn -c /vagrant/rails_test/config/unicorn.rb -E development -D
何も出てこなかったら多分起動しています。 以下のコマンドでユニコーンが起動している確認できる。プロセスが出てきたら大丈夫だね。 出てこなかったらunicornのログを確認しよう。railsプロジェクト/log/unicorn.stderr.logがあるからそれ確認。
ps -ef | grep unicorn | grep -v grep
unicorn 起動エラー
bundler: failed to load command: unicorn_rails (/home/vagrant/.rbenv/versions/2.3.3/bin/unicorn_rails)
これはおそらく実行しているディレクトリが違う。プロジェクトのディレクトリで行おう。
bundler: failed to load command: unicorn_rails (/home/vagrant/.rbenv/versions/2.3.3/bin/unicorn_rails) Bundler::GemRequireError: There was an error while trying to load the gem 'uglifier'. Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
下記のgemのコメントアウトを外しbundle installを行おう。 gem 'therubyracer', platforms: :ruby
エラー文は忘れたけど、sockが読み込めないよみたいなエラー
unixドメインソケットはVagrantの共有ディレクトリには置けないから、別の場所に指定しよう。 unicorn.rbの以下の部分だね。
listen "/tmp/unicorn.sock"
上記のようにやってたら大丈夫だと思うけど、他の場所を指定していたら場所を変えてみよう。
nginxインストール
sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm sudo yum install nginx sudo service nginx start
nginxの設定ファイルを作成する
/etc/nginx/conf.d/railsプロジェクト名.confを新規作成 しよう。
upstream rails-unicorn { # nginxのソケット保存先指定 server unix:/tmp/unicorn.sock;(uniconrnの設定ファイルと合わせる) } server { # port listen 80; # サーバーのIPアドレス server_name 192.168.33.10(vagrantfileにあるip); # DocumentRoot root /vagrant/testtest/public(自身のプロジェクトパスを指定); try_files $uri $uri.html $uri/index.html @rails-unicorn; # charset charset utf8; # logs access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log error; location @rails-unicorn { 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://rails-unicorn; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
/etc/nginx/nginx.confのuserをnginxに変更する。
sudu vi /etc/nginx/nginx.conf user nginxをuser vagrantに変更
ipブラウザに打ってアクセス。
何かエラーが起きたら
ログを確認しよう。
nginxのログ確認。 sudo cat /var/log/nginx/error.log unicornのログ確認。 プロジェクト/log/unicorn.stderr.log みたいなのがあるはずだから見てみよう。
mysql can't connect みたいなエラーが出た場合。たぶんsocketファイルがない。 mysqlを再起動すると、/var/lib/mysql/mysql.sockが自動的に作成されるので以下を実行。
sudo /etc/init.d/mysqld restart
まとめ
環境構築むずいなおい。