我正在尝试从基于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服务器。
任何帮助都将不胜感激!!!
2条答案
按热度按时间s8vozzvw1#
Rails需要关于它应该连接到的数据库服务器的信息。可以通过多种方式向Rails提供这些信息:
ENV['DATABASE_URL']
通常用于已部署的服务器,在这些服务器中替换变量比替换文件更容易config/database.yml
是一个非常常见的方法,也是新Rails应用程序中的默认方法ActiveRecord::Base.configurations=
可用于手动设置配置最后一个选项是Rails在读取数据库变量或文件时在内部使用的选项:它会根据提供给它的值设置配置,Rails会自动发现数据库配置,方法是评估前两个选项,如果其中一个选项存在,或者两个选项都存在,则提供合并的结果。
在您的例子中,Rails会自动发现一些值,这些值会告诉它在本地服务器上查找MySQL,而这并不是您想要的。
1.使用
database.yml
提供配置database.yml
有一个development
块,该块定义了通过/var/run/mysqld/mysqld.sock
访问MySQL的配置1.您正在生产服务器上尝试此操作,而不是在开发设备上
1.在运行命令之前,您尚未在shell环境中定义
RAILS_ENV
我这样猜测是因为以下提示:
/var/lib/gems
,这是运行在Linux上的生产Ruby服务器的典型配置,但不适用于开发设备1.您正在连接到远程MySQL服务器,而不是本地服务器,本地服务器是生产Ruby服务器的典型特征,但对于开发设备来说并不常见
1.默认的
RAILS_ENV
为development
,当您运行该命令时,它会从database.yml
获取该配置解决方案可能是,您需要在运行命令之前,在shell中手动将
RAILS_ENV
设置为database.yml
中定义的相应环境名称,但是**我建议您要格外小心,并提醒您在未首先验证此命令是否正确和安全之前,不要运行此命令。**例如:在运行此命令之前,应确保已确定此服务器上需要使用的环境名称(例如,
production
、staging
或development
)。您可以通过检查database.yml
以查找定义要连接的远程服务器的相应块来确定此名称。如果您无法通过查看
database.yml
来确定环境名称(例如,如果它只定义了development
块),则您的服务器很可能使用ENV['DATABASE_URL']
进行连接,您必须执行以下所有操作:1.确定
DATABASE_URL
的正确值1.确定
RAILS_ENV
的正确值1.在运行命令之前,在shell环境中设置
DATABASE_URL
1.在运行命令之前,在shell环境中设置
RAILS_ENV
正确设置这两个变量非常重要,这样才能加载正确的Rails环境(及其所有设置),并连接到该环境的正确数据库。
如果是这种情况,则在获得这些值后,可以使用以下示例重新运行命令,但是我再次敦促您务必小心,并提醒您在未首先验证此命令是否正确和安全之前不要运行此命令:
同样,在下一步运行
rake db:migrate
之前,请确保设置了这些环境变量,否则将出现相同的错误。我特别建议您在运行rake db:migrate
之前务必谨慎,不要完全确定您使用了正确的环境名称和数据库配置,因为此操作将写入远程数据库服务器。j5fpnvbx2#
您需要编辑数据库.yml文件。