soportar gemas binarias
This commit is contained in:
parent
9525747d2b
commit
6b133b9799
5 changed files with 79 additions and 12 deletions
10
Dockerfile
10
Dockerfile
|
@ -14,7 +14,7 @@ ENV RAILS_ENV production
|
|||
ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY
|
||||
|
||||
# Para compilar los assets en brotli
|
||||
RUN apk add --no-cache brotli libgit2-dev cmake
|
||||
RUN apk add --no-cache brotli
|
||||
|
||||
# Empezamos con la usuaria app creada por sdk-ruby
|
||||
USER app
|
||||
|
@ -27,7 +27,7 @@ COPY --chown=app:www-data ./Gemfile.lock .
|
|||
# XXX: No usamos la flag --production porque luego no nos deja
|
||||
# desinstalar las gemas de los assets
|
||||
# RUN --mount=type=cache,target=/home/app/.ccache \
|
||||
RUN bundle install --path=./vendor --without test development
|
||||
RUN bundle install --no-cache --path=./vendor --without='test development'
|
||||
# Vaciar la caché
|
||||
RUN rm vendor/ruby/2.5.0/cache/*.gem
|
||||
# Limpiar las librerías nativas, esto ahorra más espacio y uso de
|
||||
|
@ -65,7 +65,6 @@ RUN apk add --no-cache sqlite-libs
|
|||
# XXX: Eliminarlo cuando extraigamos la generación de sitios del proceso
|
||||
# principal
|
||||
RUN apk add --no-cache yarn
|
||||
RUN apk add --no-cache libgit2
|
||||
# Instalar foreman para poder correr los servicios
|
||||
RUN gem install --no-document --no-user-install foreman
|
||||
RUN apk add --no-cache file
|
||||
|
@ -75,6 +74,11 @@ RUN addgroup -g 82 -S www-data
|
|||
# Agregar la usuaria
|
||||
RUN adduser -s /bin/sh -G www-data -h /srv/http -D app
|
||||
|
||||
# https://github.com/rubygems/rubygems/issues/2918
|
||||
# https://gitlab.alpinelinux.org/alpine/aports/issues/10808
|
||||
COPY ./rubygems-platform-musl.patch /tmp/
|
||||
RUN cd /usr/lib/ruby/2.5.0 && patch -Np 0 -i /tmp/rubygems-platform-musl.patch
|
||||
|
||||
# Convertirse en app para instalar
|
||||
USER app
|
||||
WORKDIR /srv/http
|
||||
|
|
9
Gemfile
9
Gemfile
|
@ -1,6 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source 'https://gems.sutty.nl'
|
||||
# TODO: Podríamos usar solo gems.sutty.nl pero por alguna razón bundler
|
||||
# prefiere x86_64-linux-musl antes que x86_64-linux y ya perdimos mucho
|
||||
# tiempo buscando soporte para musl
|
||||
if ENV['RAILS_ENV'] == 'production'
|
||||
source 'https://gems.sutty.nl'
|
||||
else
|
||||
source 'https://rubygems.org'
|
||||
end
|
||||
|
||||
git_source(:github) do |repo_name|
|
||||
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
|
||||
|
|
16
Gemfile.lock
16
Gemfile.lock
|
@ -6,7 +6,7 @@ GIT
|
|||
nokogiri
|
||||
|
||||
GEM
|
||||
remote: https://:@gems.sutty.nl/
|
||||
remote: https://gems.sutty.nl/
|
||||
specs:
|
||||
actioncable (6.0.0)
|
||||
actionpack (= 6.0.0)
|
||||
|
@ -65,7 +65,7 @@ GEM
|
|||
zeitwerk (~> 2.1, >= 2.1.8)
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
airbrussh (1.3.3)
|
||||
airbrussh (1.3.4)
|
||||
sshkit (>= 1.6.1, != 1.7.0)
|
||||
ast (2.4.0)
|
||||
autoprefixer-rails (9.6.1.1)
|
||||
|
@ -159,8 +159,8 @@ GEM
|
|||
rake (>= 10, < 13)
|
||||
rubocop (>= 0.50.0)
|
||||
sysexits (~> 1.1)
|
||||
hamlit (2.9.5)
|
||||
temple (>= 0.8.0)
|
||||
hamlit (2.10.0)
|
||||
temple (>= 0.8.2)
|
||||
thor
|
||||
tilt
|
||||
hamlit-rails (0.2.3)
|
||||
|
@ -238,7 +238,7 @@ GEM
|
|||
mini_portile2 (~> 2.4.0)
|
||||
orm_adapter (0.5.0)
|
||||
parallel (1.17.0)
|
||||
parser (2.6.4.0)
|
||||
parser (2.6.4.1)
|
||||
ast (~> 2.4.0)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
|
@ -293,7 +293,7 @@ GEM
|
|||
ffi (~> 1.0)
|
||||
rbnacl (4.0.2)
|
||||
ffi
|
||||
redis (4.1.2)
|
||||
redis (4.1.3)
|
||||
redis-actionpack (5.1.0)
|
||||
actionpack (>= 4.0, < 7)
|
||||
redis-rack (>= 1, < 3)
|
||||
|
@ -315,7 +315,7 @@ GEM
|
|||
responders (3.0.0)
|
||||
actionpack (>= 5.0)
|
||||
railties (>= 5.0)
|
||||
rouge (3.10.0)
|
||||
rouge (3.11.0)
|
||||
rubocop (0.74.0)
|
||||
jaro_winkler (~> 1.5.1)
|
||||
parallel (~> 1.10)
|
||||
|
@ -377,7 +377,7 @@ GEM
|
|||
sucker_punch (2.1.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
sysexits (1.2.0)
|
||||
temple (0.8.1)
|
||||
temple (0.8.2)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thor (0.20.3)
|
||||
|
|
31
Makefile
Normal file
31
Makefile
Normal file
|
@ -0,0 +1,31 @@
|
|||
# Incluir las variables de entorno
|
||||
include .env
|
||||
|
||||
# Limpiar los archivos de testeo
|
||||
clean:
|
||||
rm -rf _sites/test-* _deploy/test-*
|
||||
|
||||
# Generar la imagen Docker
|
||||
build:
|
||||
docker build --build-arg="RAILS_MASTER_KEY=`cat config/master.key`" -t sutty/sutty .
|
||||
|
||||
# Crear el directorio donde se almacenan las gemas binarias
|
||||
../gems/:
|
||||
mkdir -p $@
|
||||
|
||||
# Compilar todas las gemas binarias y subirlas a gems.sutty.nl para que
|
||||
# al crear el contenedor no tengamos que compilarlas cada vez
|
||||
convert-gems: ../gems/
|
||||
bundle show --paths \
|
||||
| xargs -I {} sh -c 'test -d {}/ext && basename {}' \
|
||||
| sed -re "s/-([^-]+)$$/\t\1/" \
|
||||
| while read gem version; do \
|
||||
docker run \
|
||||
-v `readlink -f $<`:/srv/gems \
|
||||
-v `readlink -f ~/.ccache`:/home/builder/.ccache \
|
||||
-e HTTP_BASIC_USER=$(HTTP_BASIC_USER) \
|
||||
-e HTTP_BASIC_PASSWORD=$(HTTP_BASIC_PASSWORD) \
|
||||
-e GEM=$$gem \
|
||||
-e VERSION=$$version \
|
||||
sutty/gem-compiler:latest ; \
|
||||
done
|
25
rubygems-platform-musl.patch
Normal file
25
rubygems-platform-musl.patch
Normal file
|
@ -0,0 +1,25 @@
|
|||
--- rubygems/platform.rb.orig
|
||||
+++ rubygems/platform.rb
|
||||
@@ -89,7 +89,7 @@
|
||||
when /^dalvik(\d+)?$/ then [ 'dalvik', $1 ]
|
||||
when /^dotnet$/ then [ 'dotnet', nil ]
|
||||
when /^dotnet([\d.]*)/ then [ 'dotnet', $1 ]
|
||||
- when /linux/ then [ 'linux', $1 ]
|
||||
+ when /linux-?(\w+)?/ then [ 'linux', $1 ]
|
||||
when /mingw32/ then [ 'mingw32', nil ]
|
||||
when /(mswin\d+)(\_(\d+))?/ then
|
||||
os, version = $1, $3
|
||||
--- rubygems.rb.orig
|
||||
+++ rubygems.rb
|
||||
@@ -764,10 +764,7 @@
|
||||
def self.platforms
|
||||
@platforms ||= []
|
||||
if @platforms.empty?
|
||||
- # XXX: Patched to avoid installing platform-specific gems with binaries
|
||||
- # linked against glibc.
|
||||
- @platforms = [Gem::Platform::RUBY]
|
||||
- #@platforms = [Gem::Platform::RUBY, Gem::Platform.local]
|
||||
+ @platforms = [Gem::Platform::RUBY, Gem::Platform.local]
|
||||
end
|
||||
@platforms
|
||||
end
|
Loading…
Reference in a new issue