我从https://github.com/luciddreamz/laravel laravel下载了openshift
然后通过github上传我的存储库。这个连接数据库的代码不起作用。
问题是来自位于项目根目录的.env
文件的加载变量
解决此问题更改.env
# local environment only
# for production, see .openshift/.env
APP_ENV=APPLICATION_ENV
APP_DEBUG=true
APP_URL=OPENSHIFT_APP_DNS
APP_KEY=OPENSHIFT_SECRET_TOKEN
DB_DRIVER=mysql
DB_HOST=OPENSHIFT_MYSQL_DB_HOST
DB_PORT=OPENSHIFT_MYSQL_DB_PORT
DB_DATABASE=OPENSHIFT_APP_NAME
DB_USERNAME=OPENSHIFT_MYSQL_DB_USERNAME
DB_PASSWORD=OPENSHIFT_MYSQL_DB_PASSWORD
CACHE_DRIVER=apc
SESSION_DRIVER=file
我的错误:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称或服务未知
createConnection('mysql:host=OPENSHIFT_MYSQL_DB_HOST;port=OPENSHIFT_MYSQL_DB_PORT;dbname=OPENSHIFT_APP_NAME',
array('driver' => 'mysql',
'host' => 'OPENSHIFT_MYSQL_DB_HOST',
'port' => 'OPENSHIFT_MYSQL_DB_PORT',
'database' => 'OPENSHIFT_APP_NAME',
'username' => 'OPENSHIFT_MYSQL_DB_USERNAME',
'password' => 'OPENSHIFT_MYSQL_DB_PASSWORD',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'name' => 'mysql'),
array('0', '2', '0', false, '0')) in MySqlConnector.php line 20
答案 0 :(得分:32)
错误消息的第一行描述错误类型:" PDOException"。下一行显示PDO::errorInfo
,即:
- SQLSTATE错误代码(ANSI SQL标准中定义的五个字符的字母数字标识符)。
- 特定于驱动程序的错误代码。
- 特定于驱动程序的错误消息。
醇>
您附加的堆栈跟踪(第3行)显示您未在配置文件中指定数据库连接参数。当你在本地测试时出现错误,对吗?您需要使用实际的数据库连接参数更新/.env
。
答案 1 :(得分:4)
检查DB_HOST
文件中的.env
DB_HOST=http://localhost/ --> DB_HOST=localhost
php artisan config:clear
它会帮助您,清除缓存的配置
答案 2 :(得分:3)
我遇到了同样的问题,通过将 DB_HOST 值替换为“127.0.0.1”来解决 为 DB_SOCKET 添加附加行,就我而言,它是 /var/run/mysqld/mysqld.sock
#DB_HOST=mysql
DB_HOST=127.0.0.1
DB_SOCKET=<mysql exicutable path>
答案 3 :(得分:3)
如果您所在的网络中有多个 docker 容器,请确保它们都已启动并正在运行!我的一个容器坏了,很明显,如果你知道去哪里检查的话。
答案 4 :(得分:2)
看起来您没有在应用程序中添加MySQL数据库,或者在安装laravel后添加了它。在这种情况下,你需要停止&amp;启动(不重启)您的应用程序,以便它将获取您的环境变量。 (rhc app stop,rhc app start)。 如果你还没有添加数据库,则需要添加一个mysql盒,然后停止&amp;使用之前显示的命令启动您的应用程序。
答案 5 :(得分:2)
如果使用Docker
时遇到此问题,请确保您使用的是SQL版本。
在我的情况下:MYSQL_VERSION=latest
更改为MYSQL_VERSION=5.7
。
然后,您需要使用docker system prune -a
重新启动Docker映像。
还需要在.env
中更改DB_HOST=mysql
。并运行php artisan config:clear
。
我认为这会帮助某人。
答案 6 :(得分:1)
如果您使用的是 docker,只需检查以确保您的 DB_HOST 值对应于通过运行 public class MyRegistry : Registry
{
public class Task : ModuleBase
{
public Task()
{
JobManager.AddJob(() => (CommandHandler._discord.GetChannel(CHANNELS_ID) as IMessageChannel).SendMessageAsync("test"), (s) => s.ToRunEvery(3).Seconds());
}
}
static void Initializer()
{
JobManager.Initialize(new MyRegistry());
}
}
获得的正确 IP 地址
答案 7 :(得分:1)
在我的情况下,当laravel生成.env配置文件时,laravel在第11行和第12行还生成了两行未注释的“ DB_HOST”行,请删除显示“ mysql”的行,并取消注释(如果有注释的话)另一行(带有localhost ip 127.0.0.1的那个),它可以正常工作。 (以我为例)。
祝你有美好的一天
答案 8 :(得分:1)
有时候出现这种情况的另一个原因是由于docker-compose中的配置错误(如果您使用的是mysql容器不在您的应用服务器所在的网络上)。
如果忘记了网络标志或不正确的docker,docker不会将mysql添加到应用服务器的DNS中,因此会引发这样的错误。
答案 9 :(得分:1)
如果您在生产服务器上并且.env文件根本不起作用,请转至/bootstrap/cache/config.php,然后在第230行或多或少找到从中缓存的beeing数据库数据。 .env文件。
'mysql' =>
array (
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'yorDBname',
'username' => 'YOURUSERNAME',
'password' => 'yourpass',
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
),
答案 10 :(得分:1)
我们正在使用带有学说的symfony,我们正在自动部署。当我没有在parameters.yml中提供正确的数据库信用时,我收到了这个错误(我正在运行doctrine:migrations:migrate)
这个帖子让我有点疯狂的追逐,所以我把它留在这里,以便别人可能没有。
答案 11 :(得分:1)
我正在使用Laravel和Docker。我通过将DB_HOST
的值从localhost
更改为mysql
来解决了这个问题。
DB_HOST=mysql
答案 12 :(得分:1)
我遇到了同样的问题,每个人都在谈论这与DNS配置有关,这是有道理的,因为你的容器可能不知道如何解析数据库所在域的名称。
我想您可以在启动容器时配置它,但我认为最好一劳永逸地配置它。
我正在使用Windows 10,在这种情况下,docker的gui为我们提供了一些设施。
右键单击托盘栏中的泊坞窗图标,然后选择“设置”项。
然后,在Docker的窗口中,选择“网络”部分,将DNS选项从“自动”更改为“固定”,然后点击“应用”。 Docker将在此之后重新启动。我推出了谷歌的DNS(8.8.8.8),它对我来说很好。
希望它有所帮助。
答案 13 :(得分:0)
如果某人在hostgator之类的托管服务中遇到此问题或其他任何东西 那么您必须将“ localhost”的值更改为托管服务提供商提供的相对值。就我而言,它在右上角“ cpanel”的“ phpmyadmin”标签中为“ localhost:3302”
答案 14 :(得分:0)
就我而言,一切都设置正确,但是我的Docker
基础架构需要更多的RAM。我使用的是Docker for Mac,其默认RAM约为1 GB,而MySQL使用约1.5 Gb RAM(并且可能会崩溃???),因此将Docker RAM利用率级别更改为3-4 Gb就可以解决此问题。
答案 15 :(得分:0)
就我而言,它与网络问题完全无关。
我一直在使用laradock使用本地laravel测试环境。由于laradock在另一个容器中运行mysql服务器,因此您必须将.env文件中的mysql主机设置为docker mysql容器的名称,默认情况下为mysql。
当我转回使用homestead时,它试图连接到名为mysql的主机,而实际上应该在localhost上查找。
真是一个DUH时刻!
答案 16 :(得分:0)
就像在FYI上一样,其他人在以前(以前)可以正常使用的Laravel安装中突然遇到了这一点:
我的Laravel环境在Win-10笔记本电脑上托管的Ubuntu VirtualBox上。
我用手机通过USB共享Internet,突然开始遇到此问题。我改用手机作为无线热点,问题消失了。这是一个名称服务器/网络问题,并非特定于Laravel或MySQL。
答案 17 :(得分:0)
请尝试以下代码:
npm install
答案 18 :(得分:-1)
如果您将 Shopware 与docker结合使用,则需要首先运行./psh.phar ssh
,然后任何bin/console
命令都将起作用