Ruby on rails Rails试图根据请求连接到未配置的MySQL
看到启动Unicorn服务器时出现奇怪的问题-Ruby on rails Rails试图根据请求连接到未配置的MySQL,ruby-on-rails,ruby-on-rails-3,unicorn,Ruby On Rails,Ruby On Rails 3,Unicorn,看到启动Unicorn服务器时出现奇怪的问题-bundle exec ruby Unicorn_rails.rb启动正常,但当我访问URL时,它显示: Mysql2::Error (Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)) 因此,unicorn似乎没有连接到在database.yml中配置的远程服务器(因为它正在尝试本地连接),尽管其他命令(例如,bundle ex
bundle exec ruby Unicorn_rails.rb启动正常,但当我访问URL时,它显示:
Mysql2::Error (Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2))
因此,unicorn似乎没有连接到在database.yml中配置的远程服务器(因为它正在尝试本地连接),尽管其他命令(例如,bundle exec rails console
)工作正常。即使环境设置正确,它似乎也忽略了该设置。这是工作之前,但有东西打破了它
我将完整的堆栈跟踪放在这里:
database.yml:
staging:
adapter: mysql2
database: slide_staging
host: 192.168.1.255
port: 3306
pool: 5
username: deploy
password: <%= ENV['DB_PASS'] || "notconfiguredyet" %>
timeout: 5000
reconnect: true
staging:
适配器:mysql2
数据库:幻灯片放映
主机:192.168.1.255
港口:3306
游泳池:5
用户名:部署
密码:
超时:5000
重新连接:正确
它可能链接到unicorn配置
特别是如果你预装了应用程序。
里面有这些线吗
before_fork do |server, worker|
# the following is highly recomended for Rails + "preload_app true"
# as there's no need for the master process to hold a connection
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
# the following is *required* for Rails + "preload_app true",
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end
我终于解决了这个问题。原来Rails环境被覆盖了,因为我引入了一个包含bug的配置代码段,使用了Rails.env='test'
而不是Rails.env=='test'
。我发现我的开发模式是在测试环境下运行的,尽管ENV['RAILS_ENV']
被正确设置为开发
出于兴趣,你是否在config/database.yml套接字中设置了以下行:/tmp/mysql.sock
?@David否,数据库是远程的,所以我认为不需要任何套接字。您可以粘贴数据库.yml
文件的内容吗?启动unicorn的正确方法是bundle exec unicorn rails
在使用中当您使用-E标志强制环境时会发生什么<代码>bundle exec unicorn\u rails-E'staging'