3. 设置 CubicWeb 环境

你可以 configure the database 您选择的系统:

对于高级功能,请查看:

3.1. CubicWeb资源配置

3.2. 数据库配置

每个实例都可以配置自己的数据库连接信息,这些信息将存储在实例的 sources 文件。创建实例时将选择要使用的数据库。CubicWeb已知与PostgreSQL(推荐)、SQLServer和SQLite一起运行。

其他可能的数据源包括CubicWeb、LDAP和Mercurial,但至少需要一个关系数据库才能工作。您不需要安装不打算用于某个实例的后端。SQLite不适合生产使用,但它在测试中很好地工作,并随Python一起提供,这可以在您希望快速启动时节省安装时间。

3.2.1. 《PostgreSQL》

许多Linux发行版都附带了相应的PostgreSQL包。基本上,您需要安装以下软件包:

  • postgresqlpostgresql-client ,它将拉动相应版本的包(例如 postgresql-9.1postgresql-client-9.1 )并且,可选地,

  • postgresql-plpython-X.Y 与上述软件包的版本相对应的软件包(例如 postgresql-plpython-9.1 ). (默认情况下现在不需要)

如果您在其他主机上运行postgres,而不是 CubicWeb 存储库,您应该安装 postgresql-client 上的包 CubicWeb 主机和数据库主机上的其他主机。

有关安装的更多详细信息,请参阅 PostgreSQL project online documentation .

3.2.1.1. 数据库群集

如果您已经有一个正在运行的集群和PostgreSQL服务器,则不需要执行PostgreSQL数据库的初始化步骤,除非您希望为 CubicWeb 或者如果您的现有集群不使用UTF8编码(请参见下面的注释)。

要初始化PostgreSQL集群,请使用命令 initdb ::

$ initdb -E UTF8 -D /path/to/pgsql

注: initdb 可能不在路径中,因此您可能必须使用它的绝对路径(通常类似于 /usr/lib/postgresql/9.4/bin/initdb

注意编码规范。这是必要的,因为 CubicWeb 通常需要utf8编码的数据库。如果使用的集群编码错误,则会出现如下错误:

new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
HINT:  Use the same encoding as in the template database, or use template0 as template.

初始化后,使用命令启动数据库服务器postgresql::

$ postgres -D /path/to/psql

如果由于权限问题而无法执行此命令,请确保您的用户名对数据库具有写访问权限。地址:

$ chown username /path/to/pgsql

3.2.1.2. 数据库身份验证

数据库身份验证配置在 pg_hba.conf .它可以设置为 ident sameusermd5 . 如果设置为 md5 ,请确保使用数据库的现有用户。如果设置为 ident sameuser ,确保客户端的操作系统用户名在数据库中具有匹配的用户。如果没有,请按以下步骤创建用户:

$ su
$ su - postgres
$ createuser -s -P <dbuser>

选择权 -P (对于密码提示),将使用配置文件中设置的方法加密密码 pg_hba.conf .如果不使用此选项 -P ,则默认值将为空,您需要将其设置为::

$ su postgres -c "echo ALTER USER <dbuser> WITH PASSWORD '<dbpassword>' | psql"

当您将使用 cubicweb-ctl create 初始化实例的数据库。

3.2.1.3. 数据库创建

如果手动创建数据库(而不是使用 cubicweb-ctl db-create 工具),您可能需要确保正确设置本地设置。例如,如果需要正确处理法语重音符号以进行索引和排序,则可能需要使用如下内容创建数据库:

$ createdb --encoding=UTF-8 --locale=fr_FR.UTF-8 -t template0 -O <owner> <dbname>

请注意, cubicweb-ctl db-create 执行可能需要postgres超级用户的数据库初始化。这就是在此步骤中显式询问登录/密码的原因,这样您就可以在运行实例时使用超级用户,而无需使用此用户。在此步骤中需要特殊权限的事项:

  • 数据库创建,需要“创建数据库”权限

哪里 pgadmin 是Postgres超级用户。

3.2.2. SQLServer

在撰写本文时,对SQLServer2005的支持是功能性的,但不完整。您应该能够连接、创建一个数据库并进行相当远的工作,但是从RQL查询生成的一些SQL目前仍不被后端接受。移植到SQLServer2008也是积压工作中的一项。

这个 source 配置文件可能如下所示(仅显示特定部分):

[system]
db-driver=sqlserver2005
db-user=someuser
# database password not needed
#db-password=toto123
#db-create/init may ask for a pwd: just say anything
db-extra-arguments=Trusted_Connection
db-encoding=utf8

您需要通过运行以下命令更改数据库的默认设置:

ALTER DATABASE <databasename> SET READ_COMMITTED_SNAPSHOT ON;

上面的alter database命令需要用户可能没有的某些权限。在这种情况下,您必须要求本地DBA为您运行查询。

您可以通过运行以下必须返回“1”的查询来检查设置是否正确:

SELECT is_read_committed_snapshot_on
  FROM sys.databases WHERE name='<databasename>';

3.2.3. SQLite

sqlite具有几乎不需要配置的巨大优势。只需使用“sqlite”作为DB驱动程序,并将数据库的路径设置为DB名称。不要为db user和db password指定任何内容,它们将被忽略。

注解

sqlite非常适合测试和使用cubicWeb,但不适用于生产环境。