编辑页面

配置

概述

#

虽然 Sails 认真遵循 约定优于配置 的理念,但了解如何不时自定义这些方便的默认设置非常重要。对于 Sails 中几乎每个约定,都有一套相应的配置选项,允许您调整或覆盖这些选项以满足您的需求。

正在查找特定设置?请访问 参考 > 配置 以查看 Sails 中所有可用配置选项的完整指南。

Sails 应用可以通过 编程方式配置,通过指定 环境变量 或命令行参数,通过更改本地或全局的 .sailsrc 文件,或者(最常见的是)使用通常位于新项目 config/ 文件夹中的样板配置文件。在您的应用中使用的权威合并配置在运行时可通过全局 sails 作为 sails.config 获取。

标准配置文件 (config/*)

#

默认情况下,在新的 Sails 应用中会生成许多配置文件。这些样板文件包含许多内联注释,旨在提供快速、即时的参考,而无需在文档和文本编辑器之间来回切换。

在大多数情况下,sails.config 对象上的顶级键(例如 sails.config.views)对应于应用中的特定配置文件(例如 config/views.js);但是,您可以根据需要在 config/ 目录中的文件中安排配置设置。重要的是设置的名称(即键)——而不是它来自的文件。

例如,假设您添加了一个新文件 config/foo.js

// config/foo.js
// The object below will be merged into `sails.config.blueprints`:
module.exports.blueprints = {
  shortcuts: false
};

要全面了解各个配置选项及其默认所在文件,请查看本节中的参考页面,或查看 "config/" 中的 Sails 应用的结构 以获取更高级别的概述。

特定于环境的文件 (config/env/*)

#

在标准配置文件中指定的设置通常在所有环境(即开发、生产、测试等)中可用。如果您希望某些设置仅在特定环境中生效,则可以使用特殊的特定于环境的文件和文件夹。

默认情况下,您的应用在“开发”环境中运行。更改应用环境的推荐方法是使用 NODE_ENV 环境变量。

NODE_ENV=production node app.js

production 环境是特殊的:根据您的配置,它会启用压缩、缓存、缩小等功能。

另请注意,如果您使用的是 config/local.js,则该文件中导出的配置优先于特定于环境的配置文件。

config/local.js 文件

#

您可以使用 config/local.js 文件为您的本地环境(例如您的笔记本电脑)配置 Sails 应用。此文件中的设置优先于所有其他配置文件,除了 .sailsrc。由于它们仅用于本地使用,因此不应将其置于版本控制之下(并且出于此原因,默认情况下包含在 .gitignore 文件中)。使用 local.js 存储本地数据库设置,更改在计算机上启动应用时使用的端口等。

有关更多信息,请参阅 概念 > 配置 > local.js 文件

在应用中访问 sails.config

#

config 对象在 Sails 应用实例 (sails) 上可用。默认情况下,这在启动时在 全局作用域 上公开,因此可在应用中的任何位置使用。

示例
#
// This example checks that, if we are in production mode, csrf is enabled.
// It throws an error and crashes the app otherwise.
if (sails.config.environment === 'production' && !sails.config.security.csrf) {
  throw new Error('STOP IMMEDIATELY ! CSRF should always be enabled in a production deployment!');
}

使用环境变量直接设置 sails.config

#

除了使用配置文件外,您还可以通过在启动 Sails 时在命令行上设置 sails_ 为前缀的配置键名称,并使用双下划线 (__) 分隔嵌套键名称,来设置命令行上的各个配置值。以这种方式格式化的任何环境变量都将被解析为 JSON(如果可能)。例如,您可以执行以下操作以将 允许的 CORS 来源 (sails.config.security.cors.allowOrigins) 设置为 ["http://somedomain.com","https://anotherdomain.com:1337"] 在命令行上

sails_security__cors__allowOrigins='["http://somedomain.com","https://anotherdomain.com:1337"]' sails console

请注意,使用双引号表示 JSON 编码值内的字符串,并使用单引号围绕整个值,以便将其从控制台正确传递到 Sails。

此值在此特定 Sails 实例的生命周期内有效,并将覆盖配置文件中的任何值。

另请注意,使用环境变量指定的配置不会自动应用于以 编程方式 启动的 Sails 实例。

上述规则有几个特殊例外:NODE_ENVPORT

  • NODE_ENV 是任何 Node.js 应用的约定。当设置为 'production' 时,它会设置 sails.config.environment
  • 类似地,PORT 只是设置 sails.config.port 的另一种方式。这纯粹是为了方便和向后兼容。

这是一个您可能同时使用这两个环境变量的相对常见的示例。

PORT=443 NODE_ENV=production sails lift

如果存在于当前进程环境中,NODE_ENVPORT 将应用于通过命令行或编程方式启动的任何 Sails 应用,除非显式覆盖。

环境变量是配置 Sails 应用的最强大的方法之一。由于您可以自定义几乎任何设置(只要它是 JSON 可序列化的),因此这种方法解决了多个问题,并且是我们核心团队推荐的生产部署策略。以下是一些例子

使用命令行参数设置 sails.config

#

对于在命令行上设置环境变量可能不切实际的情况(例如某些 Windows 系统),您可以使用常规命令行参数来设置配置选项。为此,请指定以两个破折号 (--) 为前缀的选项名称,并使用点分隔嵌套键名称。命令行参数使用 minimist 进行解析,它不会解析 JSON 值(如数组或字典),但将处理字符串、数字和布尔值(使用特殊语法)。以下是一些示例。

// Set the port to 1338
sails lift --port=1338

// Set a custom "email" value to "[email protected]":
sails lift --custom.email='[email protected]'

// Turn on CSRF support
sails lift --security.csrf

// Turn off CSRF support
sails lift --no-security.csrf

// This won't work; it'll just try to set the value to the string "[1,2,3]"
sails lift --custom.array='[1,2,3]'

自定义配置

#

您还可以利用 Sails 的配置加载器来管理您自己的自定义设置。有关更多信息,请参阅 sails.config.custom

配置命令行界面

#

在配置方面,大多数情况下,您将专注于管理特定应用的运行时设置:端口、数据库设置等。但是,自定义 Sails CLI 本身也很有用;简化您的工作流程,减少重复性任务,执行自定义构建自动化等。值得庆幸的是,Sails v0.10 添加了一个强大的新工具来做到这一点。

.sailsrc 文件 与 Sails 中的其他配置源不同,因为它也可用于配置 Sails CLI——无论是系统范围、一组目录,还是仅在您 cd 到特定文件夹时。执行此操作的主要原因是自定义在运行 sails generatesails new 时使用的 生成器,但它也可用于安装您自己的自定义生成器或应用硬编码配置覆盖。

并且由于 Sails 将在当前工作目录的祖先目录中查找“最近的”.sailsrc,因此您可以安全地使用此文件配置无法检入到您的云托管代码存储库中的敏感设置(例如您的数据库密码)。只需在您的“$HOME”目录中包含一个 .sailsrc 文件即可。有关更多信息,请参阅 关于 .sailsrc 文件的文档

配置的优先级顺序

#

根据您是使用 sails liftnode app.js 从命令行启动 Sails 应用,还是使用 sails.lift()sails.load() 以编程方式启动,Sails 将按照特定顺序从多个来源获取其配置。

通过 sails liftnode app.js 启动时的优先级顺序(从最高到最低优先级)
#
以编程方式启动时的优先级顺序(从最高到最低优先级)
#

备注

#

在某些情况下,sails.config 中设置的内置含义仅在 Sails 的“lift”过程中被解释。换句话说,在运行时更改某些选项将不会产生任何影响。例如,要更改应用程序运行的端口,您不能只更改 sails.config.port——您需要在配置文件或作为命令行参数等中更改或覆盖该设置,然后重新启动服务器。

Next up: Policies

是否缺少某些内容?

如果您发现我们遗漏了某些内容或可以改进的地方,请遵循 此链接 并向 sails 代码库提交拉取请求。一旦我们合并它,更改将在下次部署网站时反映在网站上。

概念