Closed5

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

いっぺいいっぺい
$ docker-compose run --rm back bundle exec rails g devise:install

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

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

$ docker exec -it buzzbase-back-1 /bin/bash
$ ls -l [ファイルパス]
いっぺいいっぺい
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で指定されている。

いっぺいいっぺい

しかし、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"]
いっぺいいっぺい
$ 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 
いっぺいいっぺい

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
このスクラップは2023/12/05にクローズされました