【问题标题】:How to add active record database back into a Rails 5 created with --skip-active-record如何将活动记录数据库添加回使用 --skip-active-record 创建的 Rails 5
【发布时间】:2019-01-15 16:38:06
【问题描述】:

有问题的 Rails 应用最初是使用 --skip-active-record 创建的,因为不需要数据库。

现在需要将 MySQL 数据库添加到应用程序中。如何将非数据库 Rails 应用程序转换为拥有数据库?

【问题讨论】:

  • 你在项目中使用 git 吗?
  • @JavierMenéndezRizo 是的......但该应用程序之前从未有过数据库(它最初是使用 --skip-active-record 标志创建的)

标签: ruby-on-rails activerecord ruby-on-rails-5


【解决方案1】:

这就是我所做的:

  1. 上一层文件夹应用并再次运行 rails new 命令,每次都按回车键以覆盖冲突

rails new my_app_name -d mysql

  1. 使用 git 工具查看应用文件中的更改(RubyMine、gitg、smartgit)

文件已更改:

config/application.rb
config/environments/development.rb
config/environments/production.rb
config/initializers/wrap_parameters.rb
Gemfile
bin/setup
bin/update
test/test_helper.rb

新文件

config/database.yml
app/models/application_record.rb
db/seeds.rb

详细信息(差异视图 - 已删除 + 添加):

config/application.rb

-# Pick the frameworks you want:
-require "active_model/railtie"
-require "active_job/railtie"
-# require "active_record/railtie"
-require "action_controller/railtie"
-require "action_mailer/railtie"
-require "action_view/railtie"
-require "action_cable/engine"
-require "sprockets/railtie"
-require "rails/test_unit/railtie"
+require 'rails/all'

config/environments/development.rb

+# Raise an error on page load if there are pending migrations.
+config.active_record.migration_error = :page_load

config/environments/production.rb

+# 迁移后不要转储模式。 +config.active_record.dump_schema_after_migration = false

宝石文件

+# Use mysql as the database for Active Record
+gem 'mysql2', '>= 0.3.18', '< 0.6.0'

bin/设置

+# puts "\n== Copying sample files =="
+# unless File.exist?('config/database.yml')
+#   cp 'config/database.yml.sample', 'config/database.yml'
+# end

+puts "\n== Preparing database =="
+system! 'bin/rails db:setup'

bin/更新

+puts "\n== Updating database =="
+system! 'bin/rails db:migrate'

app/models/application_record.rb

+class ApplicationRecord < ActiveRecord::Base
+  self.abstract_class = true
+end

config/database.yml

+default: &default
+  adapter: mysql2
+  encoding: utf8
+  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+  username: root
+  password:
+  host: localhost

+development:
+  <<: *default
+  database: app-without-activerecord_development

+test:
+  <<: *default
+  database: app-without-activerecord_test

+production:
+  <<: *default
+  database: app-without-activerecord_production
+  username: app-without-activerecord
+  password: <%= ENV['APP-WITHOUT-ACTIVERECORD_DATABASE_PASSWORD'] %>

【讨论】:

    【解决方案2】:

    阅读您的问题后,我做的第一件事是在我的计算机上创建 2 个新项目

    rails new test-dbrails new test-no-db --skip-active-record 现在我应该有 2 个相同的项目,但 1 没有活动记录 现在可以运行两个目录之间的区别diff --brief -r test-db/ test-no-db/

    改变的文件

    1) 宝石文件

    # Use postgresql as the database for Active Record
    gem 'pg', '>= 0.18', '< 2.0'
    

    2) app/assets/javascripts/application.js

    //= require activestorage
    

    3) 添加此文件

    #test-db/app/models/application_record.rb
    class ApplicationRecord < ActiveRecord::Base
      self.abstract_class = true
    end
    

    4) 测试-db/bin/setup

    chdir APP_ROOT do
      ...
      puts "\n== Preparing database =="
      system! 'bin/rails db:setup'
      ...
    end
    

    你可以去扔剩下的文件,看看有什么不同。 我知道这不是您想要的解决方案,而是我会做的

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2015-07-03
      相关资源
      最近更新 更多