Contact salesFree trial
Blog

Wie man ein Ruby on Rails-Projekt mit devenv.sh startet

RubinrotNixSchienedevenvMySQL
Teilen Sie
Dieser Beitrag ist auch auf Englische.

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.

Wie man devenv.sh mit Ruby on Rails verwendet

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 ];

Bitte beachten Sie: In diesem Artikel werden wir nur die Standard-Rails-Assets behandeln. Wenn Sie ein anderes Asset-Framework verwenden, lesen Sie bitte dessen Dokumentation.

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!

Wie man zu Upsun pusht

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.

Ihr größtes Werk
steht vor der Tür

Kostenloser Test
Discord
© 2025 Platform.sh. All rights reserved.