我一直在一个新的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:
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
endapplication.rb:
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发布于 2012-02-17 19:45:09
当ActiveRecord是应用程序的一部分时,它会尝试在启动时建立到数据库的连接。如果连接失败,应用程序将不会启动。
问题出在这里:
require 'rails/all'这一行包括所有“常用”的rails组件,其中包括ActiveRecord。如果你去看看它的定义,它应该是这样的(对于rails 3.2):
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引用时,它将大声失败,如下所示:
config.active_record.mass_assignment_sanitizer = :strict您也需要删除这些内容。您不需要删除database.yml,但您可能应该删除它,因为它现在没有任何意义。
发布于 2012-02-17 18:54:35
需要删除配置activerecord的行:
# 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发布于 2012-02-17 19:35:22
我假设您已经检查了您的database.yml,以确保没有任何内容在查找adapter: mysql
此外,如果你在Gemfile中留下了mysql,那么mysql gem将会爆炸,因为它不能完成它的一部分,因此不得不作为一个依赖项失败。删除它并重新运行。
https://stackoverflow.com/questions/9326881
复制相似问题