关于rails项目从2.x升级到3.0以上时,mysql问题

作者在将Rails项目从2.3.8升级到3.0.5并更换数据库适配器为mysql2时遇到了类型转换错误。通过排查发现原因是数据库配置文件中未将数字类型的密码转换为字符串类型。

今日将公司的rails2.3.8项目升级到rails3.0.5的时候,我在3.0.5的项目的Gemfile里面绑定的是mysql2,然后bundle install,之后我又将项目原来的config/databases.yml文件的mysql也都改成了mysql2,其他信息暂时先不动,然后我就用rails  s来启动服务,但是每次启动的时候就报错,说是类型转换错误,当时是我是一顿好找,开始以为是mysql适配器从mysql升级到mysql2的时候会有bug,所以就反复的实验,结果不论我怎样更换适配器,都无效,索性我就进入控制台,new个对象出来,看看报不报错,果然,继续报错,这说明不是我的适配器的问题,还是一顿苦找,终于google到了一条相似的信息,说是在项目升级的时候,因为mysql数据库的适配器充mysql升级到了mysql2,这个时候database.yml里面的适配器要改为mysql2之外,还要注意一点,就是在数据库的密码的 位置,以前是mysql的时候,这里的密码都是不加引号的,因为我的数据库密码是数字,所以mysql解析成了数字类型,但是我升级到mysql2后,这里的密码仍然没有变动,这个时候,mysql就会报一个数据类型转换错误,原因就在于,我这个时候要在以前密码的基础上把密码用引号括起来,形成字符串类型,真是好郁闷,怎么还会报这样的错误。我在想,如果我的密码设置的不是数字,而是普通的字符串,那么这个时候会不会报错,没有试过,如果各位好友有遇到相同的情况还请告知一声,谢谢了。

source &#39;https://rubygems.org&#39; gem &#39;thin&#39;, &#39;1.8.0&#39; # gem &#39;ffi&#39; ruby &#39;>= 2.5.0&#39;, &#39;< 3.2.0&#39; gem &#39;bundler&#39;, &#39;>= 1.12.0&#39; gem &#39;rails&#39;, &#39;6.1.7&#39; gem &#39;globalid&#39;, &#39;~> 0.4.2&#39; if Gem.ruby_version < Gem::Version.new(&#39;2.6.0&#39;) gem &#39;rouge&#39;, &#39;~> 3.28.0&#39; gem &#39;request_store&#39;, &#39;~> 1.5.0&#39; gem &#39;mini_mime&#39;, &#39;~> 1.1.0&#39; gem "actionpack-xml_parser" gem &#39;roadie-rails&#39;, (Gem.ruby_version < Gem::Version.new(&#39;2.6.0&#39;) ? &#39;~> 2.2.0&#39; : &#39;~> 3.0.0&#39;) gem &#39;marcel&#39; gem "mail", "~> 2.7.1" gem &#39;csv&#39;, &#39;~> 3.2.0&#39; gem &#39;nokogiri&#39;, (Gem.ruby_version < Gem::Version.new(&#39;2.6.0&#39;) ? &#39;~> 1.12.5&#39; : &#39;~> 1.13.4&#39;) gem "rexml", require: false if Gem.ruby_version >= Gem::Version.new(&#39;3.0&#39;) gem &#39;i18n&#39;, &#39;~> 1.10.0&#39; gem "rbpdf", "~> 1.20.0" gem &#39;addressable&#39; gem &#39;rubyzip&#39;, &#39;~> 2.3.0&#39; gem &#39;net-smtp&#39;, &#39;~> 0.3.0&#39; gem &#39;net-imap&#39;, &#39;~> 0.2.2&#39; gem &#39;net-pop&#39;, &#39;~> 0.1.1&#39; # Rails 6.1.6.1 does not work with Pysch 3.0.2, which is installed by default with Ruby 2.5. See https://github.com/rails/rails/issues/45590 gem &#39;psych&#39;, &#39;>= 3.1.0&#39; if Gem.ruby_version < Gem::Version.new(&#39;2.6.0&#39;) # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem &#39;tzinfo-data&#39; # TOTP-based 2-factor authentication gem &#39;rotp&#39;, &#39;>= 5.0.0&#39; gem &#39;rqrcode&#39; # Optional gem for LDAP authentication group :ldap do gem &#39;net-ldap&#39;, &#39;~> 0.17.0&#39; end # Optional gem for exporting the gantt to a PNG file group :minimagick do gem &#39;mini_magick&#39;, &#39;~> 4.11.0&#39; end # Optional Markdown support, not for JRuby # ToDo: Remove common_mark group when common_mark is decoupled from markdown. See defect (#36892) for more details. gem &#39;redcarpet&#39;, &#39;~> 3.5.1&#39;, groups: [:markdown, :common_mark] # Optional CommonMark support, not for JRuby group :common_mark do gem "html-pipeline", "~> 2.13.2" gem "commonmarker", (Gem.ruby_version < Gem::Version.new(&#39;2.6.0&#39;) ? &#39;0.21.0&#39; : &#39;0.23.4&#39;) gem "sanitize", "~> 6.0" gem &#39;deckar01-task_list&#39;, &#39;2.3.2&#39; end # Include database gems for the adapters found in the database # configuration file require &#39;erb&#39; require &#39;yaml&#39; database_file = File.join(File.dirname(__FILE__), "config/database.yml") if File.exist?(database_file) yaml_config = ERB.new(IO.read(database_file)).result database_config = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(yaml_config) : YAML.load(yaml_config) adapters = database_config.values.map {|c| c[&#39;adapter&#39;]}.compact.uniq if adapters.any? adapters.each do |adapter| case adapter when &#39;mysql2&#39; gem "mysql2", "0.5.3", :platforms => [:mri, :mingw, :x64_mingw] when /postgresql/ gem "pg", "~> 1.2.2", :platforms => [:mri, :mingw, :x64_mingw] when /sqlite3/ gem "sqlite3", "~> 1.4.0", :platforms => [:mri, :mingw, :x64_mingw] when /sqlserver/ gem "tiny_tds", "~> 2.1.2", :platforms => [:mri, :mingw, :x64_mingw] gem "activerecord-sqlserver-adapter", "~> 6.1.0", :platforms => [:mri, :mingw, :x64_mingw] else warn("Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems") end end else warn("No adapter found in config/database.yml, please configure it first") end else warn("Please configure your config/database.yml first") end group :development do gem &#39;listen&#39;, &#39;~> 3.3&#39; gem "yard" end group :test do gem "rails-dom-testing" gem &#39;mocha&#39;, &#39;>= 1.4.0&#39; gem &#39;simplecov&#39;, &#39;~> 0.21.2&#39;, :require => false # gem "ffi", platforms: [:mingw, :x64_mingw, :mswin] # For running system tests gem &#39;puma&#39; gem &#39;capybara&#39;, (Gem.ruby_version < Gem::Version.new(&#39;2.6.0&#39;) ? &#39;~> 3.35.3&#39; : &#39;~> 3.36.0&#39;) gem "selenium-webdriver", "~> 3.142.7" gem &#39;webdrivers&#39;, &#39;4.6.1&#39;, require: false # RuboCop gem &#39;rubocop&#39;, &#39;~> 1.26.0&#39; gem &#39;rubocop-performance&#39;, &#39;~> 1.13.0&#39; gem &#39;rubocop-rails&#39;, &#39;~> 2.14.0&#39; end local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local") if File.exist?(local_gemfile) eval_gemfile local_gemfile end # Load plugins&#39; Gemfiles Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file| eval_gemfile file end 以上文件中 webpacker 替代目录哪个
最新发布
09-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值