我在gatsby
中有一个项目,该项目使用Node.js/express
作为MySQL
的后端。
现在,我知道我所要做的就是gatsby build
,它将为我在html/css/js
文件夹中创建静态project/public
文件,我可以将所有文件粘贴到{ {1}}文件夹,它将起作用(正在起作用),但是我对数据库问题感到困惑:
我的问题是在public_html
中,当我将mySql连接从gatsby-config.js
更改为localhost
设置时,例如:
(注释之一是托管的数据库配置)
如果我在取消注释代码的同时运行hosted db
。它说gatsby develop
(很明显)。那么,如何在这里和No such DB Error
文件中配置数据库设置以将数据库与项目连接?
我知道这听起来像是一个愚蠢的问题,但请为我下一步的工作感到困惑。
谢谢。
答案 0 :(得分:1)
您应该使用environment variables在配置(本地配置和生产配置)之间切换。环境文件是存储敏感数据(例如API密钥,令牌等)的文件,因此必须忽略和取消跟踪它们,以避免将关键数据推送到公共存储库中。
默认情况下,Gatsby分别对.env.development
和env.production
命令使用gasby develop
和gatsby build
,当然,您可以覆盖此行为,但是,假设使用默认配置,您可以应该将以下代码段添加到您的gatsby-config.js
:
require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
})
然后,您需要在项目的根目录中创建一个.env.development
和.env.production
并包含以下内容:
DB_HOST:yourHost
DB_USER:yourUserName
DB_PASSWORD:yourPassword
DB_NAME:youDatabaseName
当然,如果要在数据库或配置之间切换,每个文件应具有不同的变量。
将它们添加到您的gatsby-config.js
:
connectionDetails:{
host: process.env.DB_HOST
user: process.env.DB_USER
password: process.env.DB_PASSWORD
database: process.env.DB_NAME
}
最后一步是在主机中添加环境文件,以使Gatsby可以访问它们。 Amazon的S3允许配置它们,但我想这是托管服务的常见配置。
答案 1 :(得分:0)
好吧!在此上花费了很多时间。希望对别人有帮助。
如果您要在任何共享主机上托管静态gatsby网站。静态是指普通的盖茨比样式页面, 您可以按照gatsby doc的说明进行操作:
gatsby build
或npm run build
根据盖茨比:
Gatsby将为您的站点执行优化的生产构建,生成静态HTML和按路线的JavaScript代码包。
npm run serve
。根据gatsby:
Gatsby启动本地HTML服务器以测试您的内置站点。在使用此命令之前,请记住使用
gatsby build
构建您的网站。serve
将测试您的构建文件(在yourprojectroot/public
目录中新创建的文件)
这将在测试服务器(localhost:9000
)上运行您的项目(使用构建文件)以基本上测试您的构建文件。
如果一切正常,请测试localhost:9000
。您可以转到远程cPanel,然后将所有构建文件粘贴到public_html文件夹中。
前往您的域,您就很好了。
如果您要托管同时与node和mysql一起工作的gatsby网站,并且您是像我这样的托管新手,那么您将要做以下事情:
尝试上述两点。 (构建您的静态文件并尝试投放)
在远程数据库上也使用与本地数据库相同的名称dbname,用户名和密码来设置数据库。
另外两件事:
现在,您要做的是在同一端口上运行节点服务器和gatsby(webpack)服务器(例如 8001 )。因此,我们将仅使用节点服务器,并将我们所有的gatsby文件(构建文件)作为静态内容保存到节点服务器。
app.use(express.static(path.join(__dirname, 'public')));
app.get('/*', function(req,res) {
res.sendFile(path.join(__dirname,'public/index.html'));
});
当您要通过index.html
运行所有gatsby页面时,最后一个get('/*'...
(上方)将处理所有请求的页面。根据您的远程文件夹结构更改公用路径
将构建文件和节点(服务器连接)文件一起添加到远程public_html
文件夹中。
.htaccess
文件(在远程文件中)添加或更改为:RewriteEngine On
RewriteRule ^$ http://127.0.0.1:8001/ [P,L]
RewriteRule ^(.*)$ http://127.0.0.1:8001/$1 [P,L]
因此,当您通过服务器的终端运行节点文件时,上述的.htaccess不会将其重定向为yourdomainname.com:8001
而不是yourdomainame.com
全部完成。
您的public_html
现在应包含the build files
,a node/express conn file
和.htaccess file
。
现在,只需转到您的终端即可。 cd进入public_html并运行node yournodefilename
。
您现在可以转到您的域。
注意:可以使用pm2
软件包使节点服务器始终运行。
希望对别人有帮助。