rbenvでrubyをインストールした環境でcronを使ってrubyプログラムを動かしているつもりが動かなくなってました
gemがないとかでエラーが
手っ取り早くフルパスを指定してあげました
$ crontab -e
*/5 * * * * /usr/local/rbenv/versions/2.3.0/bin/ruby ./test.rb
いけてないですが応急処置
rbenvでrubyをインストールした環境でcronを使ってrubyプログラムを動かしているつもりが動かなくなってました
gemがないとかでエラーが
手っ取り早くフルパスを指定してあげました
$ crontab -e
*/5 * * * * /usr/local/rbenv/versions/2.3.0/bin/ruby ./test.rb
いけてないですが応急処置
DockerとRails5を試してみました
Quickstart: Compose and Rails
をベースに行いました
dockerやdocker-composeはインストール済み、Ubuntu 14.04上で行いました
Dockerfileを用意
$ vim Dockerfile
FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install -j4
ADD . /myapp
Gemfileを用意します
$ vim Gemfile
source "https://rubygems.org"
gem 'rails', '>= 5.0.0.beta4', '< 5.1'
Quickstartの手順通り、Gemfile.lockを用意
$ touch Gemfile.lock
docker-compose.ymlを用意
$ vim docker-compose.yml
version: '2'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
rails newしてrailsアプリを作っておりきます
$ docker-compose run web rails new . –force –database=postgresql –skip-bundle
railsアプリのファイル権限がrootになっているので、権限を変えます
$ sudo chown -R $USER:$USER .
javascriptランタイムのために、therubyracerのコメントアウト状態を解除
$ vim Gemfile
gem 'therubyracer', platforms: :ruby
railsのデータベース設定を用意
$ config/database.yml
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: db
test:
<<: *default
database: myapp_test
buildして立ち上げます
$ docker-compose build
$ docker-compose up
http://(server domain):3000 にアクセス!
rails5が立ち上がっています!
scaffoldして簡単に画面を作ってみます
$ docker-compose run web rails generate scaffold Article title:string
$ docker-compose run web rails db:migrate
$ docker-compose up
http://(server domain):3000/articles にアクセス!
できてます
このままだと docker rm でコンテナを消すとデータベースのデータが消えます
$ docker-compose run web rails db:migrate
すれば戻りますが、データベースをホスト側に保存させてみます
volumes を bind します
postgresql用のディレクトリをホスト側へ用意
$ mkdir -p datastore/postgresql
docker-compose.yml に バインドさせる設定を追記
$ vim docker-compose.yml
version: '2'
services:
db:
image: postgres
volumes:
- ./datastore/postgresql:/var/lib/postgresql/data
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
$ docker-compose build
$ docker-compose up
これでデータベースのデータもホスト側へ保存されるようになりました
ここまでくれば開発ができそうです
Git hookでctagsを作成する – bgbgbg
でgit commitとかすると、ctagsを作り直してたはずが効かなくなってました
原因は、権限でした…
$ chmod +x ~/.git_template/hooks/*
これで次回から動作するようになります
既にgit管理されてるディレクトリ配下の .git/hooks/* の権限が足りなければ付与すると効くようになります
Dockerでデータベースのデータを消えないようにホスト側へマウントして使おうとdocker-compose.ymlを用意
$ vim docker-compose.yml
version: '2'
services:
web:
build: containers/web
ports:
- "10080:80"
volumes:
- ./www:/var/www/html
depends_on:
- db
db:
build: containers/mysql
volumes:
- "./datastore/mysql:/var/lib/mysql"
$ docker-compose build
$ docker-compose up
マウントしていたディレクトリをホスト側で確認してみたら
$ ls -al /datastore/mysql
total 176160
drwxrwxr-x 5 newrelic newrelic 4096 5月 7 12:45 .
-rw-rw---- 1 newrelic newrelic 56 5月 6 16:49 auto.cnf
drwx------ 2 newrelic newrelic 12288 5月 6 19:32 database
-rw-rw---- 1 newrelic newrelic 79691776 5月 7 12:46 ibdata1
-rw-rw---- 1 newrelic newrelic 50331648 5月 7 12:46 ib_logfile0
-rw-rw---- 1 newrelic newrelic 50331648 5月 6 16:49 ib_logfile1
drwx------ 2 newrelic newrelic 4096 5月 6 16:49 mysql
drwx------ 2 newrelic newrelic 4096 5月 6 16:49 performance_schema
と、勝手にownerがnewrelicに!なんでだ、と思って権限を確認してみたら
ホスト側
$ cat /etc/passwd
newrelic:x:999:999:New Relic daemons:/opt/newrelic:/bin/false
コンテナの中
$ cat /etc/passwd
mysql:x:999:999::/home/mysql:/bin/sh
おそらくUIDで判断してるんだと..
データボリュームってのを使うとよさそうです
また今度試します