Rails: SQLite3 :: CantOpenException: Datenbankdatei konnte nicht geöffnet werden

8

Ich versuche, delayed_job zu verwenden, um Aufgaben mit Sqlite3 zu planen, und es sieht so aus, als ob Apache meine production.sqlite3 -Datei nicht lesen kann.

Hier ist mein database.yml :

%Vor%

Hier ist der Fehler, den ich bekomme (in log / production.log):

%Vor%

Ich habe RAILS_ENV=production rake db:create und RAILS_ENV=production rake db:migrate ausgeführt. Die db/production.sqlite3 -Datei existiert, und das Verzeichnis db und alle seine Unterordner sind Eigentum von apache:apache , woran der Apache läuft. Ich benutze Phusion Passenger bei Amazon EC2.

    
rdasxy 10.10.2012, 05:47
quelle

3 Antworten

8

SQLLite funktioniert, indem der Rails-Prozess in eine Systemdatei in der Rails-Verzeichnisstruktur schreibt. Der Rails-Prozess gehört Apache, der standardmäßig einen Benutzer "Apache" und eine Gruppe "Apache" setzt. Damit es funktioniert, müssen Sie dem Apache-Benutzer oder der Gruppe im Verzeichnis /db Schreibberechtigungen erteilen.

ODER

Konfigurieren Sie Apache für die Ausführung mit einer Gruppe, die bereits über write Berechtigungen für das Verzeichnis verfügt. Eine gute Strategie besteht darin, eine Gruppe der verschiedenen Prozesse zu erstellen, die möglicherweise Zugriff auf verschiedene Speicherorte benötigen. So habe ich zum Beispiel eine "Deployer" -Gruppe, zu der der Benutzer, der Releases ausführt, sowie die Apache-Instanz gehört. In der Regel stellt eine Gruppe, zu der die verschiedenen Prozess- und Login-Benutzer gehören, das Leben leichter (z. B. zum Anzeigen von Serverprotokollen), zum Schreiben von Uploads oder zwischengespeicherten Dateien usw.

UND / ODER

Verwenden Sie einen echten Datenbankserver wie PostgreSQL oder MySQL - sie arbeiten, weil sie ihre eigenen Prozesse sind, die ihre eigenen Dateien verwalten. Der Rails-Prozess (in Ihrem Fall Apache) stellt eine Verbindung zum Datenbankserverprozess an einem Unix-Port her. Jeder Serverprozess verwaltet sicher nur die Dateien, die er kennt.

SQLLite ist in Ordnung, um loszulegen - super einfach und mit geringem Overhead, aber sehr bald müssen Sie einen regulären Datenbankserver für die Produktion ausführen. Und dann werden Sie bald feststellen, dass die Dinge zwischen SQLLite und den anderen nicht genau übereinstimmen. An diesem Punkt sollten Sie einfach denselben Datenbankserver auf Ihrem Dev-Rechner installieren.

    
Tom Harrison Jr 07.11.2012 21:48
quelle
3

Das liegt daran, dass nginx den www-data Benutzer erstellt und dieser Benutzer kein previlegues hat, um sqlite3 Datei und Ihre App zu lesen ...

Sie müssen Befehle ausführen:

1. sudo chown -R www-data:www-data rails_project/

2. sudo chmod -R 777 rails_project/

Und überprüfen Sie, ob Sie Ihre App im Produktionsmodus starten.

    
bmalets 22.07.2014 22:04
quelle
-1

Hat in einer App, in der alles von root gehört, auf dieses Problem gestoßen.

Hier ist, wie ich gelöst wurde.

%Vor%

Der untere Punkt ist: Dies ist das Vorkommnis-Problem und Sie müssen sicherstellen, dass derjenige, der die App besitzt, ob root oder nicht-root ist, nur diesen Benutzer Lese- und Schreibzugriff auf die verwendete Datenbank geben muss% Code%. Passen Sie dies an Ihre eigene Sicherheitsstufe an.

    
zee 27.11.2016 17:52
quelle