Passar Muscat a producció¶
Un cop tenim un Muscat (DDD, Traces o IFMuC) actualtizat a proves, l'hem de passar a producció. Hi ha molta documentació a Internet sobre com passar aplicacions Rails a producció, però no sembla que ens siguin gaire útils pel nostre cas, una aplicació de tercers amb modificacions locals nostres i un conjunt de fitxers de configuració a part gestionats amb git. Per tant, a base de lectures, proves i errors, de moment ho estem fent així.
Conceptes previs¶
Les aplicacions Rails tenen dos (de fet, tres) modus de funcionament: Development o Production (i Test, que Muscat no utilitza). Tota l'aplicació funciona diferent segons aquest modus: les optimitacions, els missatges d'error, o la base de dades a la que es connecta. Si no se li diu res, per defecte les aplicacions Rails funcionen en modus desenvolupament. Per activar el modus Production, es fa de diferents maneres, depenent del context. En tots els casos, com que el valor més perillós és "production", el definim explícitament (en general, segons el nom del servidor), i en tots els altres casos es queda com a development.
Via la variable d'entorn $RAILS_ENV¶
En el nostre cas es posa automàticament per shell script d'inicialització /etc/profile.d/uab.sh, on hi ha aquestes línies:
if [ $(hostname) = "orfila" ]; then
export RAILS_ENV=production
else
export RAILS_ENV=development
fi
En el fitxer de configuració d'Apache¶
A ~/etc/apache/muscat-apache-vhost-ssl.conf:
# mod_passenger must be enabled: a2enmod passenger
RailsEnv production
PassengerRuby /opt/rubies/ruby-3.2.6/bin/ruby
Específic de Muscat¶
Muscat té una redundància, perquè utilitza una variable Rails més anomenada TEST_SERVER, definida a config/application.rb, que cal posar a true o false. En el nostre cas, la fem dependre de RAILS_ENV, i axí no ens n'hem de preocupar de tenir-la sincronitzada:
# Test server warning. Set to true to raise a flash notice waring when saving
if Rails.env.production?
TEST_SERVER = false
else
TEST_SERVER = true
end
Com verificar que tenim la nostra aplicació en modus producció¶
Mirant els noms dels fitxers de log que hi ha al directori log/. O es diuen development.log o es diuen production.log
Altres comprovacions¶
Abans de traspassar-lo, cal comprovar:
- Que a Orfila hi tingem la versió de Ruby que requereix la versió de Muscat
- Les (poques) gemes amb la versió requerida que no formin part de Muscat ni de Rails, p. ex., el
gem install base64 -v0.2.0per a la versió específica de Ruby, i que va a ~/.gem/
Copiar la versió de Muscat de test a producció¶
L'operació consisteix en
- copiar-ho tot d'un servidor a l'altre
- inicialitzar el bundler
- netejar els fitxers de log obsolets.
- refrescar el secret_key_base
- precompilar els "assets"
- executar les migracions pendents
- comprovar que podem entrar a la consola de l'aplicació sense errors
- canviar el symbolic link 'current'
- reinicialitzar el delayed_job
- reiniciilitzar Apache
- comprovar amb el navegador que tot funciona bé
traces@orfila:~/muscat$ rsync -av $LOGNAME@estrada:~/muscat/muscat-11.4.1 .
[...]
muscat-11.4.1/vendor/bundle/ruby/3.2.0/specifications/yard-0.9.37.gemspec
muscat-11.4.1/vendor/bundle/ruby/3.2.0/specifications/zeitwerk-2.7.1.gemspec
sent 466,981 bytes received 512,144,747 bytes 20,922,927.67 bytes/sec
total size is 510,207,852 speedup is 1.00
traces@orfila:~/muscat/muscat-11.4.1$ bundle config set path 'vendor/bundle'
traces@orfila:~/muscat/muscat-11.4.1$ ls -l log/
total 100376
-rw-r--r-- 1 traces users 67 Mar 9 16:14 delayed_job.log
-rw-r--r-- 1 traces users 8369390 Mar 17 06:30 development.log
-rw-r--r-- 1 traces users 10485953 Mar 16 23:29 development.log.0
-rw-r--r-- 1 traces users 10485886 Mar 16 23:28 development.log.1
[...]
traces@orfila:~/muscat/muscat-11.4.1$ rm -v log/*
[...]
removed 'log/development.log.6'
removed 'log/development.log.7'
removed 'log/development.log.8'
traces@orfila:~/muscat/muscat-11.4.1$ q new uab-to-production.patch
traces@orfila:~/muscat/muscat-11.4.1$ cp -piv ../current/config/master.key config/
'../current/config/master.key' -> 'config/master.key'
traces@orfila:~/muscat/muscat-11.4.1$ bin/rails credentials:edit
[i desar el fixer]
traces@orfila:~/muscat/muscat-11.4.1$ bundle exec rake assets:precompile
[molts i molts warnings...]
traces@orfila:~/muscat/muscat-11.4.1$ bin/rails db:migrate
DEPRECATION WARNING: ActiveSupport::ProxyObject is deprecated and will be removed in Rails 8.0.
Use Ruby's built-in BasicObject instead.
(called from <module:Delayed> at /home/traces/muscat/muscat-11.4.1/vendor/bundle/ruby/3.2.0/bundler/gems/delayed_job-9a2114057f38/lib/delayed/message_sending.rb:2)
== 20250203135421 DeleteWorkNodeRelations: migrating ==========================
-- drop_table(:work_nodes_to_institutions)
-> 0.0318s
-- drop_table(:work_nodes_to_liturgical_feasts)
-> 0.0088s
-- drop_table(:work_nodes_to_publications)
-> 0.0069s
-- drop_table(:work_nodes_to_standard_terms)
-> 0.0091s
-- drop_table(:work_nodes_to_standard_titles)
-> 0.0082s
== 20250203135421 DeleteWorkNodeRelations: migrated (0.0651s) =================
traces@orfila:~/muscat/muscat-11.4.1$ bin/rails c
DEPRECATION WARNING: ActiveSupport::ProxyObject is deprecated and will be removed in Rails 8.0.
Use Ruby's built-in BasicObject instead.
(called from <module:Delayed> at /home/traces/muscat/muscat-11.4.1/vendor/bundle/ruby/3.2.0/bundler/gems/delayed_job-9a2114057f38/lib/delayed/message_sending.rb:2)
Loading production environment (Rails 7.2.2.1)
muscat(prod)> exit
traces@orfila:~/muscat/muscat-11.4.1$ cd ..
traces@orfila:~/muscat$ rm -v current && ln -s muscat-11.4.1 current
removed 'current'
traces@orfila:~/muscat$ delayed_job.sh --restart
RAILS_ENV=production
kill 346084 346087 346090 346093 346096 346099
DEPRECATION WARNING: ActiveSupport::ProxyObject is deprecated and will be removed in Rails 8.0.
Use Ruby's built-in BasicObject instead.
(called from <module:Delayed> at /home/traces/muscat/muscat-11.4.1/vendor/bundle/ruby/3.2.0/bundler/gems/delayed_job-9a2114057f38/lib/delayed/message_sending.rb:2)
delayed_job.0: process with pid 1432015 started.
delayed_job.1: process with pid 1432018 started.
delayed_job.2: process with pid 1432021 started.
delayed_job.3: process with pid 1432024 started.
delayed_job.4: process with pid 1432027 started.
delayed_job.5: process with pid 1432030 started.
Actualtizar l'icona:
traces@orfila:~/muscat/muscat-11.4.1$ cd public
traces@orfila:~/muscat/muscat-11.4.1/public$ rm -iv favicon.ico && ln -sv images/uab/$LOGNAME.ico favicon.ico
rm: remove symbolic link 'favicon.ico'? y
removed 'favicon.ico'
'favicon.ico' -> 'images/uab/traces.ico'
traces@orfila:~/muscat/muscat-11.4.1/public$ cd ..
traces@orfila:~/muscat/muscat-11.4.1$ q refresh
> refresh-temp (new)
- refresh-temp
# refresh-temp
> uab-to-production.patch
Reiniciar l'Apache:
root@orfila:~# service apache2 restart
root@orfila:~#
I provar que funcioni, evidentment!
Actualitzat per Ferran Jorba fa 8 mesos · 12 revisions bloquejat