質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

0回答

420閲覧

unicornの起動時にappname/tmp/unicorn.pid not writable (ArgumentError) が出る

oeiqgfodgfhps

総合スコア35

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

0クリップ

投稿2022/01/17 15:38

docker-composeにnginx、unicorn、railsを載せて環境構築をしています。下記のようにファイルを記述したのですが、pid = appname/tmp/unicorn.pid not writable (ArgumentError) のように出てしまいました。 Dockerfileにtmp/pidsをmkdirするコマンドを書いたりしましたが、変わりませんでした。ご知見ある方がいらっしゃいましたらご助言の方お願いいたします。

Docekrfile

FROM ruby:3.0.2 RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs\ default-mysql-server\ default-mysql-client WORKDIR /appname COPY Gemfile /appname/Gemfile COPY Gemfile.lock /appname/Gemfile.lock RUN gem install bundler RUN bundle install RUN mkdir -p tmp/sockets RUN mkdir -p tmp/pids

docker-compose.yml

version: '3' services: app: build: context: . command: bundle exec unicorn -p 3000 -c /app-name/config/unicorn.rb depends_on: - db volumes: - .:/appname - public-data:/appname/public - tmp-data:/appname/tmp - log-data:/appname/log db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_DATABASE: appname-development volumes: - db-data:/var/lib/mysql redis: image: redis:latest ports: - 6379:6379 volumes: - ./log:/var/log/redis - ./data/redis:/data command: redis-server --appendonly yes web: build: context: ./nginx_docker volumes: - public-data:/appname/public - tmp-data:/appname/tmp ports: - 80:80 depends_on: - app - redis volumes: public-data: tmp-data: log-data: db-data:

nginx_docker/Dockerfile

FROM nginx:1.15.8 RUN rm -f /etc/nginx/conf.d/* ADD nginx.conf /etc/nginx/conf.d/appname.conf CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

config/unicorn.rb

ruby

1$worker = 2 2$timeout = 30 3$app_path = File.expand_path('../../', __FILE__) 4puts $app_path 5$listen = File.expand_path 'tmp/sockets/unicorn.sock', $app_dir 6$pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir 7$std_log = File.expand_path 'log/unicorn.log', $app_dir 8# set config 9worker_processes $worker 10working_directory $app_path 11stderr_path $std_log 12stdout_path $std_log 13timeout $timeout 14listen $listen 15pid $pid 16# loading booster 17preload_app true 18# before starting processes 19before_fork do |server, worker| 20 defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 21 old_pid = "#{server.config[:pid]}.oldbin" 22 if old_pid != server.pid 23 begin 24 Process.kill "QUIT", File.read(old_pid).to_i 25 rescue Errno::ENOENT, Errno::ESRCH 26 end 27 end 28end 29# after finishing processes 30after_fork do |server, worker| 31 defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection 32end

nginx_dpcker/nginx.conf

upstream unicorn { #ユニコーンソケットの設定 server unix:/appname/tmp/sockets/unicorn.sock fail_timeout=0; } server { #IPとポートの指定 listen 80 default; #サーバーネームの指定 server_name localhost; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; #ドキュメントルートの指定 root /appname/public; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; try_files $uri/index.html $uri @unicorn; keepalive_timeout 5; location @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://unicorn; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問