Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails数据库配置未指定适配器。我该怎么办?_Ruby On Rails_Ruby_Database - Fatal编程技术网

Ruby on rails Rails数据库配置未指定适配器。我该怎么办?

Ruby on rails Rails数据库配置未指定适配器。我该怎么办?,ruby-on-rails,ruby,database,Ruby On Rails,Ruby,Database,以下是错误消息: /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:47:in `resolve_hash_connection' /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activereco

以下是错误消息:

/Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:47:in `resolve_hash_connection'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:41:in `resolve_string_connection'
    ...
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/application.rb:103:in `require_environment!'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/application.rb:297:in `block (2 levels) in initialize_tasks'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `eval'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `<main>'
我的档案:

source 'https://rubygems.org'

gem "therubyracer"
gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails"
gem 'jquery-rails'
gem 'devise'

gem 'rails', '3.2.13'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

group :development, :test do
    gem 'sqlite3'
end

group :production do
    gem 'pg'
end

gem 'mini_magick'
gem "rmagick"
gem "carrierwave"


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

我已经用一个示例数据库配置包装了一个gist,请确保您使用它。 摘要载于:

还要确保运行rake
db:setup
来设置数据库

另外,由于在您的环境中,您也在使用Sqlite进行生产和测试,因此在您的Gemfile中更改以下行:

group :development, :test do
    gem 'sqlite3'
end


它不应该有任何显著的区别,除非您使用的是开发以外的其他环境

我在一个有点复杂的项目中解决了一个类似的问题。不确定这是否有直接关系,但我发布这篇文章是因为调试问题的方法可能会有所帮助

在我的案例中,我有以下场景:

  • 只有在
    RAILS\u ENV=production
    时才会出现这种情况。当我做
    RAILS\u ENV=development
    时,它起了作用。奇怪的是,当我将
    database.yml
    中的
    production
    条目更改为
    production2
    并使用
    RAILS\u ENV=production2
    运行命令时,它起了作用
  • 在这个项目中,我通过各种模型和库连接到多个数据库连接
以下是我为检测问题所做的工作:

vim/Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active\u record/connection\u adapters/abstract/connection\u specification.rb

(或者无论回溯告诉您问题在哪里)

然后,我在代码中找到了包含以下行的位置:

def resolve_hash_connection(spec) # :nodoc:
  spec = spec.symbolize_keys

  raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
并将其更改为以下内容:

def resolve_hash_connection(spec) # :nodoc:
  spec = spec.symbolize_keys

  # Debug printing
  puts "*" * 80, spec.inspect, "*" * 80

  raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
然后我重新运行命令,在我的例子中是
bundle exec rails c production

通过这样做,我意识到Rails并不像我想象的那样寻找
产品
条目。它正在寻找一个名为
abc_production
的不同条目,这是我的项目所必需的,因为我前面提到了多个数据库连接。在那个特定的服务器上,有人忘了将
abc\u production
条目添加到
database.yml
。添加条目解决了这个问题

我相信只有在
RAILS\u ENV=production
时才会发生这种情况,因为在
environments/production.rb
中,我有
config.eager\u load=true
,这意味着RAILS将急切地将应用程序和类加载到内存中,并可能尝试建立在这些类中定义的所有数据库连接(其中一个是abc_生产


希望这对处于类似情况的人有所帮助…如果您没有使用多个连接,请尝试通过更改
connection\u specification.rb来调试该问题,并查看它是否为您提供了任何线索。

我现在不知道您到底想做什么,但是

目前,我在尝试使用ruby-2.10运行时遇到了相同的错误

`解析\u散列\u连接”:数据库配置未指定适配器(ActiveRecord::AdapterNotSpecified)

当我运行时,一切正常


也许这对某些人有帮助

我在登台环境中遇到了类似的问题,我确实遇到了:

  • 在designe.rb初始值设定项文件中添加了designe secret
  • 在secrets.yml中配置了暂存“secret\u key\u base”

  • 我也遇到了这个问题。我尝试了所有我能找到的类似问题,但没有一个解决了我的问题,然后我尝试在
    activerecord-3.2.13/lib/active\u record/connection\u adapters/abstract/connection\u specification.rb中打印系统从database.yml读取的配置

    def resolve_string_connection(spec) # :nodoc:
      hash = configurations.fetch(spec) do |k|
        connection_url_to_hash(k)
      end
      p configurations
      p spec
      raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash
    
      resolve_hash_connection hash
    end
    
    输出是

    {"production"=>nil, "  adapter"=>"mysql2", "  encoding"=>"utf8mb4", "  username"=>"myUsername", "  password"=>"myPassword", "  pool"=>5, "  database"=>"mydb", "  host"=>"myHost", "  port"=>3306, "mydb_production"=>nil}
    
    所以我的问题是数据库中有错误。yml导致YAML解析错误。但是我肉眼没有发现任何错误,所以我从另一台服务器复制了一个文件,然后问题解决了


    希望这能帮助某人:p

    意识到这有点陈旧,但在寻找类似问题的答案时遇到了。只是想指出,您的.yml中仍然有sqlite3作为适配器。正如您可能已经发现的那样,Heroku不允许sqlite3作为生产数据库。

    看起来您没有这样做在所有的错误消息中都是y?请给我们看
    gem
    文件。没有换行符,您的数据库配置就是这样吗?如果是,那肯定是您的问题。@Douglasfshear它只是格式化,我编辑了它。您能评估
    Rails.env
    并在这里报告吗?例如,放置一个“
    环境.rb
    中抛出Rails.env
    ?在数据库中未定义的(自定义)环境中运行Rails时,通常会发生这些错误。yml。这些都没有帮助。感谢您的尝试。这可以确定调用的环境,并帮助我解决问题。谢谢!
    def resolve_string_connection(spec) # :nodoc:
      hash = configurations.fetch(spec) do |k|
        connection_url_to_hash(k)
      end
      p configurations
      p spec
      raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash
    
      resolve_hash_connection hash
    end
    
    {"production"=>nil, "  adapter"=>"mysql2", "  encoding"=>"utf8mb4", "  username"=>"myUsername", "  password"=>"myPassword", "  pool"=>5, "  database"=>"mydb", "  host"=>"myHost", "  port"=>3306, "mydb_production"=>nil}