Closed5

Permission denied @ rb_sysopen - /rails/config/initializers/devise.rb (Errno::EACCES)

Ippei ShimizuIppei Shimizu
$ docker-compose run --rm back bundle exec rails g devise:install

実行時に発生した。
ファイルシステムのパーミッションに関するエラーらしい。

Dockerコンテナ内でパーミッションを確認みる

$ docker exec -it buzzbase-back-1 /bin/bash
$ ls -l [ファイルパス]
Ippei ShimizuIppei Shimizu
RUN useradd rails --create-home --shell /bin/bash && \
-     chown -R rails:rails db log storage tmp
+     chown -R rails:rails db log storage tmp && \
+     chown -R rails:rails /rails/config/initializers/ && \
+     chown -R rails:rails /rails/config/locales/
USER rails:rails

これで成功した。

chown -R rails:rails /rails/config/initializers/ && \

これを追加することで、railsユーザーが/rails/config/initializersディレクトリ内での編集権限を持つことができるようになります。

chown -R rails:rails /rails/config/locales/

こちらは、/rails/config/locales/devise.en.ymlファイルを作成する時に、パーミッションエラーが発生してしまったため、railsユーザーに/rails/config/locales/ディレクトリ内への編集権限を持たせています。

railsユーザーとは、、、

/back/Dockerfile内の、USER rails:railsで指定されている。

Ippei ShimizuIppei Shimizu

しかし、dockerで作成されたファイルが、ローカルプロジェクトに反映されていない。

docker-compose.ymlのbackのvolumesの設定とback/Dockerfile

docker-compose.yml
    volumes:
      - ./back:/app
back/Dockerfile
# Rails app lives here
- WORKDIR /rails
+ WORKDIR /app

# Copy built artifacts: gems, application
COPY --from=build /usr/local/bundle /usr/local/bundle
- COPY --from=build /rails /rails
+ COPY --from=build /app /app

# Run and own only the runtime files as a non-root user for security
RUN useradd rails --create-home --shell /bin/bash && \
    chown -R rails:rails db log storage tmp && \
 -   chown -R rails:rails /rails/config/initializers/ && \
 -   chown -R rails:rails /rails/config/locales/
 +   chown -R rails:rails /app/config/initializers/ && \
 +   chown -R rails:rails /app/config/locales/
USER rails:rails

+ ENV GEM_HOME=/usr/local/bundle
+ ENV PATH $GEM_HOME/bin:$PATH

# Entrypoint sets up the container.
- ENTRYPOINT ["/rails/bin/docker-entrypoint"]
+ ENTRYPOINT ["/app/bin/docker-entrypoint"]
Ippei ShimizuIppei Shimizu
$ docker-compose down
$ docker-compose build
$ docker-compose up
$ docker-compose run back bundle install

複数のRubyのgemでビルドエラー発生。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
An error occurred while installing racc (1.7.3), and Bundler cannot continue.
An error occurred while installing nio4r (2.6.1), and Bundler cannot continue.
An error occurred while installing websocket-driver (0.7.6), and Bundler cannot continue.
An error occurred while installing date (3.3.4), and Bundler cannot continue.
An error occurred while installing bcrypt (3.1.20), and Bundler cannot continue.
An error occurred while installing msgpack (1.7.2), and Bundler cannot continue.
An error occurred while installing pg (1.5.4), and Bundler cannot continue.
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y \ 
    build-essential libpq-dev \
+    build-essential \ 
+    libpq-dev \  
+   make 
Ippei ShimizuIppei Shimizu

docker-compose run --rm back bundle installでエラー発生。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
$ brew install gcc
$ brew install postgresql

Dockerfileのbaseステージに以下を追加する。

FROM ruby:$RUBY_VERSION-slim as base

RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y build-essential libpq-dev make && \
    rm -rf /var/lib/apt/lists/*
$ docker-compose build --no-cache
$ docker-compose run --rm back bundle install
このスクラップは5ヶ月前にクローズされました