Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 数据库配置未指定适配器_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 数据库配置未指定适配器

Ruby on rails 数据库配置未指定适配器,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在尝试连接mysql数据库时遇到此错误。问题是这个应用程序工作了几个星期,然后我随机收到了这个消息。当我收到此错误消息时,应用程序无法重新连接到数据库,直到我重新启动它 我正在使用配置文件连接到数据库,并且指定了适配器…在运行时不会生成数据库配置 你知道发生了什么吗?记得使用基于C的ruby gem for mysql。基于ruby的系统对于生产来说是不稳定的 尝试安装gem gem install mysql 请记住将libmySQL.dll复制到ruby bin目录中。我发现了一些线索,

我在尝试连接mysql数据库时遇到此错误。问题是这个应用程序工作了几个星期,然后我随机收到了这个消息。当我收到此错误消息时,应用程序无法重新连接到数据库,直到我重新启动它

我正在使用配置文件连接到数据库,并且指定了适配器…在运行时不会生成数据库配置


你知道发生了什么吗?

记得使用基于C的ruby gem for mysql。基于ruby的系统对于生产来说是不稳定的

尝试安装gem

gem install mysql

请记住将libmySQL.dll复制到ruby bin目录中。

我发现了一些线索,这可能与较旧的库(ActiveRecord)或gem版本有关。例如,(升级后)或,它“阻止gems需要旧活动记录gem的适配器”。虽然这两个都很古老,但如果可能的话,确保你的宝石是最新的可能是值得的

您是否正在使用本机rails MySQL适配器?这在rails下已经被弃用,但可以想象,它仍在蹒跚前行

我也很快地看了一下
连接规范.rb
,这就是这个错误的来源,我最好的猜测是重新连接失败了。。。但是为什么呢(因为当你第一次启动应用程序的时候,它显然是好的)?您是否正在做一些疯狂的事情,比如调用
ActiveRecord::Base。在应用程序控制器(或其他地方)中建立\u连接


或者类似于:当连接断开时,会在深夜从cron调用scriptrunner。不幸的是,调用运行程序时使用了不正确的
RAILS\u ENV
。因此,从
数据库.yml
中读取了错误的节,并且该节包含无效的
适配器:

我刚刚遇到这个问题,它是由我的configuration.yml中的一个打字错误引起的

我最初有这样一个:

production:
  adapter:mysql
当我想要这个的时候:

production:
  adapter: mysql

adapter:和mysql之间的一小部分空间造成了差异。

我发现了另一个可能导致此问题的原因:“使用
&
*
混入”另一个YAML节点

我最初是这样做的,以方便本地、每开发、Git忽略的配置文件:

但是,经过一些调试后,我发现
build\u connection
出于某种原因被调用时只使用混合的键值对,而不是主要的键值对。即,
适配器
主机
数据库
未传入。我不知道为什么,这曾经对我有用


无论如何,我现在没有混入另一个YAML节点,而是将整个
开发
测试
散列放在本地配置文件中,并且
建立连接
再次被正确调用

sudo rails s-e“生产”-第80页

我应该从rails开始

sudo rails s-e“生产”-第80页


我在另一个问题上犯了这个错误;我已经两次指定了“开发”,而“测试”一点也没有。

互联网上有很多糟糕的教程显示yaml文件,如下所示:

development:
encoding: utf
database: dbname
...etc
YAML文件区分大小写,每个给定db类型属性的内部内容需要两个空格。像这样:

development:
  encoding: utf
  database: dbname
  ...etc

更新:我今天再次出现此错误。当我的应用程序运行Rails 3.2.6时,我的VPS服务器安装了Rails 3.2.8


当然,一定要检查Gemfile和database.yml文件。这里的问题已经清楚地说明了---Rails没有与您的数据库通信是由于适配器(也称为gem)

另一个可能的原因:

在Rails 3.2.x中,
build\u connection
有一个来自环境的默认参数集:

发件人:

ConnectionSpecification::Resolver
的工作方式取决于
ENV['DATABASE\u URL']
如果未设置,则给出
nil
。(通常,它类似于
”postgres://...“


因此,如果您碰巧错误配置了
DATABASE\u URL
,使得
ENV['DATABASE\u URL']='
,那么当我尝试运行命令行脚本(这里是'my\u script')时,
数据库配置不会指定适配器,同样的错误也会发生。原因是:

  • 那里只有生产环境
  • 我没有为命令行设置RAILS\u ENV
  • 因此,以下是我的解决方案:

    $RAILS\u ENV=生产我的脚本

    rails-e“生产”
    还可以

    只有
    rails-e产品
    返回错误

    database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)
    

    调用
    rake资产:预编译:all

    这可能不是导致此错误的最可能的问题,但这里只是以防万一


    我的问题是,我使用符号作为键在
    散列
    中构建数据库设置,然后使用
    #to_yaml
    to
    database.yaml
    将其序列化。ActiveRecord希望环境名称为
    字符串
    ,而不是
    符号
    ,因此在读取生成的文件时,它没有拾取数据库设置。我通过在散列中使用字符串键修复了它。

    对于Rails4,注释行
    fetch(:default_env)。merge!(rails_env:'production')
    中的
    production.rb
    并添加
    set:rails_env,:production
    修复了它。

    如果在使用Capistrano部署时出现此错误。确保通过设置正确的RAILS\u ENV

    set :rails_env, 'production'
    
    例如,我没有在中为Capistrano临时部署配置显式设置Rails环境。因此,Capistrano使用“staging”作为RAILS_ENV,导致上述错误。在staging.rb文件中将其设置为生产
    set :rails_env, 'production'
    
    db:migrate RAILS_ENV=product
    
    db:migrate RAILS_ENV=production
    
    bundle exec cap staging deploy
    
    production:
      adapter: mysql2
      encoding: utf8
      database: rails
      username: rails
      password: pass
      host: 127.0.0.1
      port: 3306
      pool: 5
      timeout: 5000
    
    staging:
      adapter: mysql2
      encoding: utf8
      database: rails
      username: rails
      password: pass
      host: 127.0.0.1
      port: 3306
      pool: 5
      timeout: 5000
    
    class CacheCleanerActiveRecord < ActiveRecord::Base
      establish_connection "cache_cleaner_#{Rails.env}"
      self.abstract_class = true
    end
    
    RAILS_ENV= test
    
    RAILS_ENV=test
    
    $ RAILS_ENV=DEVELOPMENT rails server webrick
    => Booting WEBrick
    => Rails 4.2.5 application starting in DEVELOPMENT on http://localhost:3000
    => Run `rails server -h` for more startup options
    => Ctrl-C to shutdown server
    config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
    
      * development - set it to false
      * test - set it to false (unless you use a tool that preloads your test environment)
      * production - set it to true
    
    Exiting
    /home/fangxing/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_c
    onnection': 'DEVELOPMENT' database is not configured. Available: ["default", "development", "test", "production"] (ActiveRecord::AdapterNotSpecified)
            from /home/fangxing/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:211:in `res
    olve_connection'
    
    
    
    $ RAILS_ENV=development rails server webrick
    RubyDep: WARNING: Your Ruby is outdated/buggy. (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1)
    RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: install 2.3.1.
    => Booting WEBrick
    => Rails 4.2.5 application starting in development on http://localhost:3000
    => Run `rails server -h` for more startup options
    => Ctrl-C to shutdown server
    [2016-07-20 16:41:09] INFO  WEBrick 1.3.1
    [2016-07-20 16:41:09] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
    [2016-07-20 16:41:09] INFO  WEBrick::HTTPServer#start: pid=19881 port=3000
    
    You did not specify how you would like Rails to report deprecation notices for your test@example.com environment, please set config.active_support.deprecation to :log, :notify or :stderr at config/environments/test@example.com.rb
    
    establish_connection "myconnection"