Ruby on rails 数据库配置未指定适配器
我在尝试连接mysql数据库时遇到此错误。问题是这个应用程序工作了几个星期,然后我随机收到了这个消息。当我收到此错误消息时,应用程序无法重新连接到数据库,直到我重新启动它 我正在使用配置文件连接到数据库,并且指定了适配器…在运行时不会生成数据库配置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目录中。我发现了一些线索,
你知道发生了什么吗?记得使用基于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
todatabase.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"