Deploy-Rails Ich versuche, ein kleines Rails-Projekt mit dem Device-Juwel in eine Docker-Version zu migrieren. Zur Veranschaulichung (MWE) werde ich das Geräte-Beispiel verwenden.Deppen-Rails Beispiel im Produktionsmodus mit Docker
Ohne Docker alles ist in Ordnung:
git clone git://github.com/RailsApps/rails-devise.git
cd rails-devise
bundle install
bundle exec rake db:migrate
rails s
Jetzt habe ich dieses Beispiel in der Produktion in einem Docker Container ausgeführt werden soll. Daher fügte ich Dockerfile
, docker-compose.yml
und .env.web
hinzu. Die Idee ist, Best-Practice zu folgen und alle Geheimnisse in der Umgebung .env.web
Datei setzen, die alle geheimen Schlüssel und configs enthält:
PORT=3000
SECRET_KEY_BASE=e69d022dcead6a7025f6f7d37cf540d5c53fd5a075826998418b2165a3138ff4e32b82a45feb338a61a2d1d81f677173025b514ebc315e1fc9cd7ad4ed80d145
DOMAIN_NAME=example.com
Der Geheimschlüssel wird über erhalten:
bundle exec rake secret
zu helfen Beantworte ich diese Frage, lege ich alles in eine Abzweigung dieses Repositories. Zu meinem Problem reproduzieren können Sie diese Befehle
git clone https://github.com/patwie-stuff/rails-devise.git
cd rails-devise
docker-compose build
Arbeiten laufen, aber ich habe:
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '28952e4c2a1372b9ff2ec6b46fbbe942fa192fac9192982313f692e7ff3fae6c9227a8b6fd0034b87e64ebefb757c854095cc4f3594f7254280697ddf98c47b8'
Please ensure you restarted your application after installing Devise or setting the key.
/usr/local/bundle/gems/devise-3.5.2/lib/devise/rails/routes.rb:475:in `raise_no_secret_key'
/usr/local/bundle/gems/devise-3.5.2/lib/devise/rails/routes.rb:209:in `devise_for'
/myapp/config/routes.rb:3:in `block in <top (required)>'
Dieser Fehler resultiert aus
RUN RAILS_ENV=production bundle exec rake assets:precompile --trace
Das Standardverhalten sagt devise secret_key_base
von Schienen verwendet, die durch Standard. Dieser Wert wird aus der Umgebung abgerufen, daher die Datei .env.web
. Aber es ist da! Wie kann ich das Zeug von secret.yml in der Umgebungsdatei behalten?
uncommenting Linie 15,16 im Dockerfile und läuft
docker-compose run web ruby test.rb
gibt das korrekte Ergebnis a_production_secret_key
.
Gibt es einen Unterschied zwischen "Docker-Compose Build" und "Docker-Compose Run Web test.rb"? Offensichtlich ist der Unterschied Build-Zeit und Laufzeit.
Aber wie gehe ich mit der SECRET_KEY_BASE-Variable für die Produktion um? Ich möchte das nicht in der Dockerdatei fest codieren. Was ist die beste Vorgehensweise hier? Für die Produktion muss man die Assets vorkompilieren.
Kann ich dort einen Dummy-Wert für SECRET_KEY_BASE eingeben? Ich fühle mich nicht gut mit einem hartcodierten Dummy-Wert in der Dockerfile.
Ich habe das gleiche Problem ... obwohl ich eine lokale env-Datei einlege, nicht env.web. Haben Sie eine Antwort darauf gefunden? Die einzige Problemumgehung, die ich finde, ist die Einstellung der config.assets.compile = true in der Produktion, und das ist definitiv nicht Best Practice ... Das Seltsamste ist, dass ich Rake Assets ausführen kann: Precompile innerhalb der Produktionsumgebung , aber nicht auf dockerfile ich nicht ... – MrWater