In diesem Artikel werden wir einen Blick auf den Prozess des Pushens eines Ruby on Rails-Projekts auf Upsun mit Hilfe von devenv.shwerfen .
Devenv ist ein lokales Entwicklungstool, ähnlich wie Docker Compose, aber ohne den Container-Build-Schritt, was bedeutet, dass es schneller und reproduzierbar ist, da es Nixverwendet , ein leistungsstarkes Paketmanagement- und Systemkonfigurationswerkzeug. Wenn Sie ein Rails-Anfänger sind und Nix als Entwicklungsumgebung ausprobieren wollen, ohne zu tief einzutauchen, können Sie dies auf Ihrem Linux und MacOS schneller tun als mit Docker Compose oder Devbox, da sich beide auf Container konzentrieren. Und da es bereits eine Menge Sprachen und Dienste unterstützt, ist Nix ein ziemlich einfaches Tool zum Testen.
Der erste Schritt besteht darin, devenv.shmit der von Ihnen bevorzugten Installationsmethode zu installieren - ichempfehle die Verwendung eines flake, mit dem Sie einfach experimental-features = nix-command flakesto zu
~/.config/nix/nix.conf
hinzufügen können.
Sobald Sie devenv.sh erfolgreich installiert haben, ist es an der Zeit, ein neues Rails-Projekt zu erstellen, indem Sie den folgenden Befehl verwenden - wir können das Bundle überspringen, da wir es später in devenv behandeln werden.
> rails new rails-7-mysql --database=mysql --skip-bundle
Erstellen Sie dann die Basisdateien mit diesem Befehl:
> devenv init - .envrc erstellen - devenv.nix erstellen - devenv.yaml erstellen - .gitignore erstellen
Wie Sie sehen, erzeugt devenv eine .envrc für direnv, um eine automatische Shell-Aktivierung einzurichten, wenn Sie Ihr Projekt betreten, und die devenv.nix enthält die Projektdefinition - dazu später mehr.
Für den Moment können Sie damit beginnen, einige Pakete zur devenv.nix hinzuzufügen:
# https://devenv.sh/packages/ packages = with pkgs; [ git ruby_3_3 pkg-config libyaml.dev openssl.dev ];
Der nächste Schritt besteht darin, die Dinge so einzurichten, dass Sie die devenv-Shell aufrufen können. Wenn du in dein Projektverzeichnis gehst, wird es die Umgebung laden, die es braucht, um den PATH mit nixpkgs anstelle von locals zu ersetzen und die dort definierten Befehle auszuführen. Ich ziehe es vor, `bundle` jedes Mal auszuführen, um die Projektabhängigkeiten zu installieren und sicherzustellen, dass wir immer die neuesten Abhängigkeiten haben und keine Probleme bekommen, wenn wir zur devenv-Umgebung wechseln.
enterShell = '' git --version ruby --version bundle ''; # https://devenv.sh/languages/ languages.ruby = { enable = true; package = pkgs.ruby_3_3; };
Wenn Gems fehlschlagen - ein Beispiel für einen Fehler beim Build ist unten zu sehen - müssen Sie möglicherweise postgresql
oder libmysqlclient
installieren, um das Problem zu lösen:
W: Gem::Ext::BuildError: ERROR: Gem::Ext::BuildError: ERROR: Failed to build gem native extension W: W: current directory: /app/vendor/bundle/ruby/3.2.0/gems/psych-5.1.1/ext/psych W: /nix/store/7apky1wg5v258lk066d6xw1g3ddmy6dn-ruby-3.2.2/bin/ruby extconf.rb W: check for yaml.h... no W: yaml.h not found W: *** extconf.rb failed *** W: Could not create Makefile due to some reason, probably lack of necessary W: libraries and/or headers.
Vom Terminal aus können Sie das richtige Paket finden, indem Sie die interaktive Shell nix repl --file '<nixpkgs>'
starten und die Paketausgaben mit libmysqlclient.outputs
untersuchen. Normalerweise enthält die dev-Ausgabe
Header, die für kompilierte Gems benötigt werden, z.B. libyaml.dev
für den Psych
Ruby YAML Parser gem.
Gehen Sie vom Browser aus auf https://search.nixos.org/packages, wo auch die Ausgaben angezeigt werden - meistens ist es dev
und kann zur Paketliste
in devenv.nix
hinzugefügt werden.
Wenn Sie Ihr Paket komplett haben, können Sie sich nun den Diensten zuwenden - herzlichen Glückwunsch, das mit den Abhängigkeiten kann manchmal schwierig sein.
Für eine MySQL-Datenbank darf man nicht vergessen, libmysqlclient.dev
zur Paketliste hinzuzufügen, da sonst das mysql2-Gem nicht kompiliert werden kann:
services.mysql = { enable = true; package = pkgs.mysql; initialDatabases = [{ name = "rails_7_mysql_development"; }]; ensureUsers = [ { name = "root"; password = ""; ensurePermissions = { "rails_7_mysql_development.*" = "ALLE BERECHTIGUNGEN"; }; } ]; };
Um den Rails-Server zu starten, wenn devenv up
verwendet wird, müssen wir nur den folgenden Befehl zu den Prozessen hinzufügen:
processes.rails.exec = "rails server";
Jetzt sollten Sie in der Lage sein, lokal zu entwickeln, Ihr Gemfile.lock zu aktualisieren und Datenbankmigrationen und Tests durchzuführen. Genießen Sie die schnelle Einrichtung und Entwicklung!
Um die grundlegende Upsun-Konfiguration zu erstellen, können Sie upsun project:init
ausführen, dies wird Ihnen einige Fragen stellen und .upsun/config.yaml
generieren. Wir sind dabei, den Rails-Stack in den project:init-Befehl
zu integrieren, daher müssen Sie einige Dinge zur Konfiguration hinzufügen, wie Sie unten sehen können. Vergessen Sie nicht, die .environment-Datei
zu Git hinzuzufügen und sie aus dem Standard-Rails .gitignore
zu entfernen.
Willkommen bei Upsun! Lassen Sie uns mit ein paar Fragen beginnen. Wir müssen ein wenig mehr über Ihr Projekt wissen. Dies wird nur eine Minute dauern! Welche Sprache verwendet Ihr Projekt? Wir unterstützen die folgenden Sprachen: Mit den Pfeilen nach oben und unten, mit der Tastatur filtern C#/.Net Core Elixir Go Java Lisp JavaScript/Node.js PHP Python > Ruby Rust - Wählen Sie alle Dienste aus, die Sie verwenden: Mit den Pfeilen nach oben und unten, mit der Leertaste auswählen, mit der Tastatur filtern > [x] MariaDB [ ] MySQL [ ] PostgreSQL [ ] Redis [ ] Redis Persistent [ ] Memcached [ ] OpenSearch
Bei hooks müssen Sie Folgendes tun:
hooks: build: | set -eux bundle install bundle exec rails assets:precompile deploy: | set -eux bundle exec rake db:migrate
Auf der Variablenseite müssen Sie Folgendes tun:
Variablen: env: PIDFILE: "tmp/server.pid" RAILS_ENV: "production"
Der letzte Punkt sind die Mounts für Logs, tmp und Storage:
mounts: "log": source: "tmp" source_path: "tmp" "storage": Quelle: "storage" source_path: "storage" "tmp": Quelle: "tmp" source_path: "tmp"
Sobald dies abgeschlossen ist, können Sie ein Projekt mit upsun project:create
und upsun push
erstellen. Wenn alles klappt, sollten Sie den Standard-Rails-Index sehen. Hurra!
Mehr Informationen finden Sie immer in unseren Dokumenten.
Vielen Dank an Eder Leão Moosmann und Paul Gilzow für die Mitarbeit an diesem Beitrag.