首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么rails要尝试连接到mysql?

为什么rails要尝试连接到mysql?
EN

Stack Overflow用户
提问于 2012-02-17 18:49:33
回答 3查看 1.2K关注 0票数 0

我一直在一个新的rails应用程序中使用mysql,但现在我想尝试一下mongoDB,所以我安装了mongo mapper和mongoid (使用mongo session)。安装似乎很好,因为我可以创建mongo模型。但是由于某些原因,rails仍然试图连接到mysql:Can't connect to local MySQL server

这太可怕了,因为即使我不使用mongo,rails也不应该为每个请求都尝试连接到mysql。即使对于不存在的urls,它也会抛出错误。

我能做些什么来调试它?我想我可以尝试从Gemfile中删除mysql gem并运行bundle install。但我仍然不喜欢它试图连接的事实,即使我不使用它。它不应该尝试“懒惰地”连接(即:仅按需连接)吗?

development.rb:

代码语言:javascript
复制
Myapp::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # Raise exception on mass assignment protection for Active Record models
  config.active_record.mass_assignment_sanitizer = :strict

  # Log the query plan for queries taking more than this (works
  # with SQLite, MySQL, and PostgreSQL)
  config.active_record.auto_explain_threshold_in_seconds = 0.5

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true
end

application.rb:

代码语言:javascript
复制
require File.expand_path('../boot', __FILE__)

require 'rails/all'

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

module Myapp
  class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)

# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]

# Activate observers that should always be running.
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de

# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"

# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]

# Use SQL instead of Active Record's schema dumper when creating the database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql

# Enforce whitelist mode for mass assignment.
# This will create an empty whitelist of attributes available for mass-assignment for all models
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
# parameters by using an attr_accessible or attr_protected declaration.
# config.active_record.whitelist_attributes = true

# Enable the asset pipeline
config.assets.enabled = true

# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'

config.generators do |g|
  g.orm :mongo_mapper
end
  end
end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-17 19:45:09

当ActiveRecord是应用程序的一部分时,它会尝试在启动时建立到数据库的连接。如果连接失败,应用程序将不会启动。

问题出在这里:

代码语言:javascript
复制
require 'rails/all'

这一行包括所有“常用”的rails组件,其中包括ActiveRecord。如果你去看看它的定义,它应该是这样的(对于rails 3.2):

代码语言:javascript
复制
require "rails"

%w(
  active_record
  action_controller
  action_mailer
  active_resource
  rails/test_unit
  sprockets
).each do |framework|
  begin
    require "#{framework}/railtie"
  rescue LoadError
  end
end

使用此代码,删除active_record行,并将其放入rails/all行。现在,没有包含ActiveRecord,当您的应用程序在代码中看到ActiveRecord引用时,它将大声失败,如下所示:

代码语言:javascript
复制
config.active_record.mass_assignment_sanitizer = :strict

您也需要删除这些内容。您不需要删除database.yml,但您可能应该删除它,因为它现在没有任何意义。

票数 3
EN

Stack Overflow用户

发布于 2012-02-17 18:54:35

需要删除配置activerecord的行:

代码语言:javascript
复制
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict

# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
票数 0
EN

Stack Overflow用户

发布于 2012-02-17 19:35:22

我假设您已经检查了您的database.yml,以确保没有任何内容在查找adapter: mysql

此外,如果你在Gemfile中留下了mysql,那么mysql gem将会爆炸,因为它不能完成它的一部分,因此不得不作为一个依赖项失败。删除它并重新运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9326881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档