Ich kann nicht in eine Datei schreiben für das Leben von mir mit Sinatra in der Produktion.Schreiben in eine Datei in der Produktion mit sinatra
In meiner Entwicklungsumgebung kann ich Logger
ohne ein Problem verwenden und STDOUT in einer Datei protokollieren.
Es scheint wie in der Produktion, die Logger
Klasse wird von der RACK Middleware Logger
überschrieben und es macht die Dinge komplizierter.
Ich möchte einfach in eine Datei wie folgt schreiben: Ist
post '/' do
begin
$log_file = File.open("/home/ec2-user/www/logs/app.log", "w")
...do..stuff...
$log_file.write "INFO -- #{Time.now} --\n #{notification['Message']}"
...do..stuff...
rescue
$log_file.write "ERROR -- #{Time.now} --" + "\njob failed"
ensure
$log_file.close
end
end
Die Datei kann nicht erstellt werden, wenn ich eine POST-Anforderung an ‚/‘ erhalten.
jedoch die Datei erstellt bekommt, wenn ich den Lauf hebel App laden:
pry -r ./app.rb
Ich bin sicher, der Code innerhalb des POST-Blockes effektiv ausgeführt wird, da neue Arbeitsplätze bei Empfang Anfragen an die Datenbank hinzugefügt zu werden.
Jede Hilfe würde sehr geschätzt werden.
Hinweis: Es ist fast immer besser, eine Singleton-Klasse zu haben als eine globale Variable wie '$ log_file'. Namespaces helfen, den Code zu organisieren und Namenskonflikte zu vermeiden. Jedes Modul "besitzt" seinen lokalen Namespace, aber der globale Variablenraum ist geteilt, daher gibt es dort normalerweise eine Menge Probleme. – tadman
Hat die Produktion Sinatra Datei/Verzeichnis Berechtigungen, um eine Datei dort zu erstellen? Erhalten Sie irgendwelche Fehler? – Amadan
@Amadan funktioniert es gut von IRB obwohl. Ich denke, ich würde Erlaubnisfehler erhalten, wenn ich die Datei von der REPL auch erstelle, aber das ist ein guter Punkt. Ich werde sehen, ob es damit zu tun hat. – Shiyason