Improve Dockerfile when use some skip options
This commit is contained in:
parent
c396d97535
commit
08cb03127e
@ -271,7 +271,7 @@ def web_server_gemfile_entry # :doc:
|
||||
end
|
||||
|
||||
def asset_pipeline_gemfile_entry
|
||||
return if options[:skip_asset_pipeline]
|
||||
return if skip_asset_pipeline?
|
||||
|
||||
if options[:asset_pipeline] == "sprockets"
|
||||
GemfileEntry.floats "sprockets-rails",
|
||||
@ -335,7 +335,11 @@ def keeps? # :doc:
|
||||
end
|
||||
|
||||
def sqlite3? # :doc:
|
||||
!options[:skip_active_record] && options[:database] == "sqlite3"
|
||||
!skip_active_record? && options[:database] == "sqlite3"
|
||||
end
|
||||
|
||||
def skip_active_record? # :doc:
|
||||
options[:skip_active_record]
|
||||
end
|
||||
|
||||
def skip_active_storage? # :doc:
|
||||
@ -354,12 +358,16 @@ def skip_action_text? # :doc:
|
||||
options[:skip_action_text]
|
||||
end
|
||||
|
||||
def skip_asset_pipeline? # :doc:
|
||||
options[:skip_asset_pipeline]
|
||||
end
|
||||
|
||||
def skip_sprockets?
|
||||
options[:skip_asset_pipeline] || options[:asset_pipeline] != "sprockets"
|
||||
skip_asset_pipeline? || options[:asset_pipeline] != "sprockets"
|
||||
end
|
||||
|
||||
def skip_propshaft?
|
||||
options[:skip_asset_pipeline] || options[:asset_pipeline] != "propshaft"
|
||||
skip_asset_pipeline? || options[:asset_pipeline] != "propshaft"
|
||||
end
|
||||
|
||||
|
||||
@ -511,10 +519,10 @@ def dockerfile_binfile_fixups
|
||||
|
||||
def dockerfile_build_packages
|
||||
# start with the essentials
|
||||
packages = %w(build-essential git)
|
||||
packages = %w(build-essential git pkg-config)
|
||||
|
||||
# add databases: sqlite3, postgres, mysql
|
||||
packages += %w(pkg-config libpq-dev default-libmysqlclient-dev)
|
||||
# add database support
|
||||
packages << build_package_for_database unless skip_active_record?
|
||||
|
||||
# ActiveStorage preview support
|
||||
packages << "libvips" unless skip_active_storage?
|
||||
@ -543,17 +551,19 @@ def dockerfile_build_packages
|
||||
end
|
||||
end
|
||||
|
||||
packages.sort
|
||||
packages.compact.sort
|
||||
end
|
||||
|
||||
def dockerfile_deploy_packages
|
||||
# start with databases: sqlite3, postgres, mysql
|
||||
packages = %w(libsqlite3-0 postgresql-client default-mysql-client)
|
||||
packages = []
|
||||
|
||||
# ActiveRecord databases
|
||||
packages << deploy_package_for_database unless skip_active_record?
|
||||
|
||||
# ActiveStorage preview support
|
||||
packages << "libvips" unless skip_active_storage?
|
||||
|
||||
packages.sort
|
||||
packages.compact.sort
|
||||
end
|
||||
|
||||
# CSS processors other than Tailwind and Sass require a node-based JavaScript environment. So overwrite the normal JS default
|
||||
@ -727,6 +737,15 @@ def git_init_command
|
||||
def edge_branch
|
||||
self.class.edge_branch
|
||||
end
|
||||
|
||||
def dockerfile_chown_directories
|
||||
directories = %w(log tmp)
|
||||
|
||||
directories << "storage" unless skip_active_storage? && !sqlite3?
|
||||
directories << "db" unless skip_active_record?
|
||||
|
||||
directories.sort
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -38,6 +38,23 @@ def convert_database_option_for_jruby
|
||||
end
|
||||
end
|
||||
|
||||
def build_package_for_database(database = options[:database])
|
||||
case database
|
||||
when "mysql" then "default-libmysqlclient-dev"
|
||||
when "postgresql" then "libpq-dev"
|
||||
else nil
|
||||
end
|
||||
end
|
||||
|
||||
def deploy_package_for_database(database = options[:database])
|
||||
case database
|
||||
when "mysql" then "default-mysql-client"
|
||||
when "postgresql" then "postgresql-client"
|
||||
when "sqlite3" then "libsqlite3-0"
|
||||
else nil
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def mysql_socket
|
||||
@mysql_socket ||= [
|
||||
|
@ -58,7 +58,7 @@ RUN bundle exec bootsnap precompile app/ lib/
|
||||
<%= "RUN " + dockerfile_binfile_fixups.join(" && \\\n ") %>
|
||||
|
||||
<% end -%>
|
||||
<% unless options.api? -%>
|
||||
<% unless options.api? || skip_asset_pipeline? -%>
|
||||
# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
|
||||
RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
|
||||
|
||||
@ -67,18 +67,20 @@ RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
|
||||
# Final stage for app image
|
||||
FROM base
|
||||
|
||||
<% unless dockerfile_deploy_packages.empty? -%>
|
||||
# Install packages needed for deployment
|
||||
RUN apt-get update -qq && \
|
||||
apt-get install --no-install-recommends -y <%= dockerfile_deploy_packages.join(" ") %> && \
|
||||
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
||||
|
||||
<% end -%>
|
||||
# Copy built artifacts: gems, application
|
||||
COPY --from=build /usr/local/bundle /usr/local/bundle
|
||||
COPY --from=build /rails /rails
|
||||
|
||||
# Run and own only the runtime files as a non-root user for security
|
||||
RUN useradd rails --home /rails --shell /bin/bash && \
|
||||
chown -R rails:rails db log storage tmp
|
||||
chown -R rails:rails <%= dockerfile_chown_directories.join(" ") %>
|
||||
USER rails:rails
|
||||
|
||||
# Entrypoint prepares the database.
|
||||
|
@ -1,8 +1,10 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
<% unless skip_active_record? -%>
|
||||
# If running the rails server then create or migrate existing database
|
||||
if [ "${*}" == "./bin/rails server" ]; then
|
||||
./bin/rails db:prepare
|
||||
fi
|
||||
|
||||
<% end -%>
|
||||
exec "${@}"
|
||||
|
Loading…
Reference in New Issue
Block a user