chore: Update Docker dev setup

Этот коммит содержится в:
Mattia Roccoberton
2025-03-14 23:00:20 +01:00
родитель 728e3fa097
Коммит 0913bb6915
12 изменённых файлов: 104 добавлений и 135 удалений

1
.rspec
Просмотреть файл

@@ -1 +1,2 @@
--require rails_helper --require rails_helper
--format documentation

20
Gemfile
Просмотреть файл

@@ -2,19 +2,31 @@
source 'https://rubygems.org' source 'https://rubygems.org'
if ENV["DEVEL"] == "1" if ENV['DEVEL'] == '1'
gem 'rails', '~> 7.1.0' # for Docker dev
rails_ver = ENV.fetch('RAILS_VERSION')
gem 'rails', rails_ver
gem 'activeadmin', '~> 3.3' gem 'activeadmin', ENV.fetch('ACTIVEADMIN_VERSION')
gem 'activeadmin_quill_editor', path: './' gem 'activeadmin_quill_editor', path: './'
if rails_ver.start_with?('7.0')
gem 'concurrent-ruby', '1.3.4'
gem 'sqlite3', '~> 1.4'
else
gem 'sqlite3'
end
else else
gemspec gemspec
gem 'sqlite3'
end end
gem 'bigdecimal'
gem 'mutex_m'
gem 'puma' gem 'puma'
gem 'sassc' gem 'sassc'
gem 'sprockets-rails' gem 'sprockets-rails'
gem 'sqlite3'
# Testing # Testing
gem 'capybara' gem 'capybara'

Просмотреть файл

@@ -105,22 +105,50 @@ the editor will not destroy them, you'll need to implement a purge logic for tha
Project created by [Mattia Roccoberton](http://blocknot.es), thanks also to the good guys that opened issues and pull requests from time to time. Project created by [Mattia Roccoberton](http://blocknot.es), thanks also to the good guys that opened issues and pull requests from time to time.
A Docker dev setup is provided if you like to work with it: There 3 ways to interact with this project:
1) Using Docker:
```sh ```sh
# Run rails server on the dummy app (=> http://localhost:3000 to access to ActiveAdmin): # Run rails server on the dummy app (=> http://localhost:3000 to access to ActiveAdmin):
make up make up
# Enter in a console of the dummy app after it has been started: # Enter in a Rails console (with the dummy app started):
make console make console
# Enter in a shell of the dummy app after it has been started: # Enter in a shell (with the dummy app started):
make shell make shell
# Run the linter on the project: # Run the linter on the project (with the dummy app started):
make lint make lint
# Remove container and image after stopping the app: # Run the test suite (with the dummy app started):
make specs
# Remove container and image:
make cleanup make cleanup
# To try different versions of Ruby/Rails/ActiveAdmin edit docker-compose.yml
# For more commands please check the Makefile
``` ```
For more commands please check the [Makefile](Makefile). 2) Using Appraisal:
```sh
export RAILS_ENV=development
# Install dependencies
bin/appraisal
# Run server (or any command)
bin/appraisal rails s
# Or with specific versions
bin/appraisal rails71-activeadmin rails s
```
3) With a local setup:
```sh
# Dev setup (set the required envs)
source extra/dev_setup.sh
# Install dependencies
bundle
# Run server (or any command)
bin/rails s
# To try different versions of Rails/ActiveAdmin edit extra/dev_setup.sh
```
## Do you like it? Star it! ## Do you like it? Star it!

Просмотреть файл

@@ -4,9 +4,14 @@ services:
build: build:
context: . context: .
dockerfile: ./extra/Dockerfile dockerfile: ./extra/Dockerfile
# dockerfile: ./extra/Dockerfile_alpine
args: args:
RUBY_VERSION: 3.3.6 # Debian-based Ruby image:
RUBY_IMAGE: ruby:3.4-slim
UID: ${UID} UID: ${UID}
environment:
ACTIVEADMIN_VERSION: ~> 3.3
RAILS_VERSION: ~> 8.0
user: "${UID}:${GID}" user: "${UID}:${GID}"
ports: ports:
- '3000:3000' - '3000:3000'

Просмотреть файл

@@ -1,5 +1,5 @@
ARG RUBY_VERSION=3 ARG RUBY_IMAGE=ruby:3
FROM ruby:${RUBY_VERSION} FROM ${RUBY_IMAGE}
ARG UID ARG UID
@@ -8,19 +8,14 @@ ENV LANG=C.UTF-8
ENV RAILS_ENV=development ENV RAILS_ENV=development
RUN apt-get update -qq RUN apt-get update -qq
RUN DEBIAN_FRONTEND=noninteractive apt-get install -yqq --no-install-recommends build-essential chromium libyaml-dev RUN DEBIAN_FRONTEND=noninteractive apt-get install -yqq --no-install-recommends build-essential chromium libyaml-dev nano
RUN gem install bundler RUN gem install bundler
RUN echo 'gem: --no-document' > /etc/gemrc RUN echo 'gem: --no-document' > /etc/gemrc
COPY . /app
RUN mkdir -p /home/app
RUN useradd -u ${UID} --shell /bin/bash app RUN useradd -u ${UID} --shell /bin/bash app
RUN mkdir -p /home/app && chown -R app:app /home/app
RUN chown -R app /usr/local/bundle RUN chown -R app /usr/local/bundle
RUN chown -R app:app /home/app && chown -R app:app /app
USER ${UID} USER ${UID}
COPY . /app
WORKDIR /app
RUN bundle update

18
extra/Dockerfile_alpine Обычный файл
Просмотреть файл

@@ -0,0 +1,18 @@
FROM ruby:3.3-alpine
ARG UID
ENV DEVEL=1
ENV LANG=C.UTF-8
ENV RAILS_ENV=development
RUN apk update && apk add --no-cache build-base chromium tzdata yaml-dev
RUN gem install bundler
RUN echo 'gem: --no-document' > /etc/gemrc
RUN adduser -u ${UID} -D app
RUN mkdir -p /home/app && chown -R app:app /home/app
RUN chown -R app /usr/local/bundle
COPY . /app

8
extra/dev_setup.sh Исполняемый файл
Просмотреть файл

@@ -0,0 +1,8 @@
#!/bin/sh
export DEVEL=1
export RAILS_VERSION=7.2.2.1
export ACTIVEADMIN_VERSION=3.3.0
export RAILS_ENV=development

Просмотреть файл

@@ -1,2 +1,8 @@
echo "> Install dependencies"
rm -f Gemfile.lock && bundle install
echo "> Run pending migrations"
cd spec/dummy && bundle exec rails db:migrate cd spec/dummy && bundle exec rails db:migrate
cd - && rm -f spec/dummy/tmp/pids/server.pid && bundle exec rails s -b 0.0.0.0
echo "> Start Rails server"
cd /app && rm -f spec/dummy/tmp/pids/server.pid && bundle exec rails s -b 0.0.0.0

Просмотреть файл

@@ -59,4 +59,8 @@ Rails.application.configure do
# Use an evented file watcher to asynchronously detect changes in source code, # Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem. # routes, locales, etc. This feature depends on the listen gem.
# config.file_watcher = ActiveSupport::EventedFileUpdateChecker # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
###
config.active_support.to_time_preserves_timezone = :zone if Gem::Version.new(Rails.version) >= Gem::Version.new('8.0')
end end

Просмотреть файл

@@ -1,112 +0,0 @@
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true
# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
# or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
# config.require_master_key = true
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = 'http://assets.example.com'
# Specifies the header that your server uses for sending files.
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local
# Mount Action Cable outside main process or domain.
# config.action_cable.mount_path = nil
# config.action_cable.url = 'wss://example.com/cable'
# config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true
# Use the lowest log level to ensure availability of diagnostic information
# when problems arise.
config.log_level = :debug
# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
# Use a real queuing backend for Active Job (and separate queues per environment).
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "dummy_production"
# config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify
# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new
# Use a different logger for distributed setups.
# require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
# Inserts middleware to perform automatic connection switching.
# The `database_selector` hash is used to pass options to the DatabaseSelector
# middleware. The `delay` is used to determine how long to wait after a write
# to send a subsequent read to the primary.
#
# The `database_resolver` class is used by the middleware to determine which
# database is appropriate to use based on the time delay.
#
# The `database_resolver_context` class is used by the middleware to set
# timestamps for the last write to the primary. The resolver uses the context
# class timestamps to determine how long to wait before reading from the
# replica.
#
# By default Rails will store a last write timestamp in the session. The
# DatabaseSelector middleware is designed as such you can define your own
# strategy for connection switching and pass that into the middleware through
# these configuration options.
# config.active_record.database_selector = { delay: 2.seconds }
# config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
# config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
end

Просмотреть файл

@@ -46,4 +46,8 @@ Rails.application.configure do
# Raises error for missing translations. # Raises error for missing translations.
# config.action_view.raise_on_missing_translations = true # config.action_view.raise_on_missing_translations = true
###
config.active_support.to_time_preserves_timezone = :zone if Gem::Version.new(Rails.version) >= Gem::Version.new('8.0')
end end

Просмотреть файл

@@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2018_06_07_053739) do ActiveRecord::Schema[8.0].define(version: 2018_06_07_053739) do
create_table "active_admin_comments", force: :cascade do |t| create_table "active_admin_comments", force: :cascade do |t|
t.string "namespace" t.string "namespace"
t.text "body" t.text "body"