mysql Redmine:尝试从Cookie会话更改为数据库时出错

j91ykkif  于 2023-03-07  发布在  Mysql
关注(0)|答案(2)|浏览(125)

我正在尝试从基于cookie的会话转移到数据库。我正在运行此命令。我收到以下错误。它正在尝试连接到本地MySQL服务器。我没有本地MySQL服务器。我有一个Redmine连接到的专用MySQL服务器,但当我尝试运行此命令时:

rails generate active_record:session_migration

它尝试查找本地MySQL示例:

/var/lib/gems/3.0.0/gems/activerecord-6.1.7/lib/active_record/connection_adapters/mysql2_adapter.rb:45:in `rescue in new_client': Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) (ActiveRecord::ConnectionNotEstablished)

我不知道如何告诉它连接到远程MySQL服务器。
任何帮助都将不胜感激!!!

s8vozzvw

s8vozzvw1#

Rails需要关于它应该连接到的数据库服务器的信息。可以通过多种方式向Rails提供这些信息:

  • 环境变量ENV['DATABASE_URL']通常用于已部署的服务器,在这些服务器中替换变量比替换文件更容易
  • 文件config/database.yml是一个非常常见的方法,也是新Rails应用程序中的默认方法
  • 方法ActiveRecord::Base.configurations=可用于手动设置配置

最后一个选项是Rails在读取数据库变量或文件时在内部使用的选项:它会根据提供给它的值设置配置,Rails会自动发现数据库配置,方法是评估前两个选项,如果其中一个选项存在,或者两个选项都存在,则提供合并的结果。
在您的例子中,Rails会自动发现一些值,这些值会告诉它在本地服务器上查找MySQL,而这并不是您想要的。
1.使用database.yml提供配置

  1. database.yml有一个development块,该块定义了通过/var/run/mysqld/mysqld.sock访问MySQL的配置
    1.您正在生产服务器上尝试此操作,而不是在开发设备上
    1.在运行命令之前,您尚未在shell环境中定义RAILS_ENV
    我这样猜测是因为以下提示:
  2. gem将安装到/var/lib/gems,这是运行在Linux上的生产Ruby服务器的典型配置,但不适用于开发设备
    1.您正在连接到远程MySQL服务器,而不是本地服务器,本地服务器是生产Ruby服务器的典型特征,但对于开发设备来说并不常见
    1.默认的RAILS_ENVdevelopment,当您运行该命令时,它会从database.yml获取该配置
    解决方案可能是,您需要在运行命令之前,在shell中手动将RAILS_ENV设置为database.yml中定义的相应环境名称,但是**我建议您要格外小心,并提醒您在未首先验证此命令是否正确和安全之前,不要运行此命令。**例如:
export RAILS_ENV=production
rails generate active_record:session_migration

在运行此命令之前,应确保已确定此服务器上需要使用的环境名称(例如,productionstagingdevelopment)。您可以通过检查database.yml以查找定义要连接的远程服务器的相应块来确定此名称。
如果您无法通过查看database.yml来确定环境名称(例如,如果它只定义了development块),则您的服务器很可能使用ENV['DATABASE_URL']进行连接,您必须执行以下所有操作:
1.确定DATABASE_URL的正确值
1.确定RAILS_ENV的正确值
1.在运行命令之前,在shell环境中设置DATABASE_URL
1.在运行命令之前,在shell环境中设置RAILS_ENV
正确设置这两个变量非常重要,这样才能加载正确的Rails环境(及其所有设置),并连接到该环境的正确数据库。
如果是这种情况,则在获得这些值后,可以使用以下示例重新运行命令,但是我再次敦促您务必小心,并提醒您在未首先验证此命令是否正确和安全之前不要运行此命令

export DATABASE_URL=mysql2://username:password@remote_host_name/database_name
export RAILS_ENV=production
rails generate active_record:session_migration

同样,在下一步运行rake db:migrate之前,请确保设置了这些环境变量,否则将出现相同的错误。我特别建议您在运行rake db:migrate之前务必谨慎,不要完全确定您使用了正确的环境名称和数据库配置,因为此操作将写入远程数据库服务器。

j5fpnvbx

j5fpnvbx2#

您需要编辑数据库.yml文件。

相关问题