【问题标题】:How do I import a SQL schema into Rails如何将 SQL 模式导入 Rails
【发布时间】:2009-06-02 08:44:57
【问题描述】:

例如,我有一个可以使用的 SQL 模式。我如何将它导入到我的 Rails 应用程序中,以便我使用我准备好的数据库而不是所有那些有趣的迁移。

编辑:到目前为止,你们都误解了我的问题。我在问我在 PostgresQL 中是否有一个工作数据库应用程序。我将如何使用它作为我的 Rails 应用程序的基础?

【问题讨论】:

  • 我的回应和迈克伍德豪斯的立场。

标签: sql ruby-on-rails database


【解决方案1】:

没有要求您使用“有趣”或其他方式的迁移。只需开始从您的表中创建模型。 Rails 作者足够聪明,能够认识到支持“遗留模式”的必要性。

请注意,如果您的主键不称为id,那么您需要定义主键(参见“Agile Web Development With Rails 3rd edition”的 p316):

class LegacyBook < ActiveRecord::Base
  self.primary_key = "isbn"
end

同样,如果您的外键名称不遵循 AR 常规默认样式,您需要在关系定义中明确定义它们。

开箱即用,ActiveRecord 还不支持复合主键:它有点像第 5 范式(PK 只是一种在业务领域中没有意义的任意数字)。至少有一个 gem,适当地命名为 composite_primary_keys(gem 以通常的方式安装),但它可能还不支持 AR 2.3(当我 gem list --remote composite 时看到 v2.2.2)。 Google Groups有一些讨论。

【讨论】:

    【解决方案2】:

    应该这样做

      def self.up
        execute <<EOF
    begin;
      SQL HERE
    commit;
    EOF
      end
    

    【讨论】:

    • 附加说明,所有这一切都会在您执行 rake db:migrate 时在迁移中运行一些 SQL,任何模型都需要手动设置。
    【解决方案3】:

    我会将当前数据库转储到 Rails 架构中,然后使用它来生成迁移文件。通过这种方式,您可以以 Rails 方式更好地控制您的数据库。 为此,您应该:

    1. 设置您的数据库配置文件 (config/database.yml)
    2. 运行rake db:schema:dump,它将创建架构文件db/schema.rb
    3. 使用schema.rb 的内容创建您的迁移文件

    -

     #db/migrate/001_create_database.rb
     class CreateDatabase < ActiveRecord::Migration
       def self.up
         # the content of schema.rb
       end
    
       def self.down
         # drop all the tables
       end
     end
    

    这样您可以在以后开发应用时利用迁移。

    【讨论】:

      【解决方案4】:

      如果您的数据库表遵循 Rails 的 ActiveRecord naming conventions,那么您应该可以继续使用了。运行 SQL 以创建数据库对象。然后,您可以以正常方式生成 Rails 模型,但跳过创建迁移文件。

      例如:

      script/generate --skip-migration User name:string, age:integer
      

      【讨论】:

        【解决方案5】:

        像这样编辑您的 config/database.yml 文件:

        development:
          database: [your legacy database name]
          host: localhost
          adapter: postgres
        

        您可能还必须包含用户名和密码密钥,我通常不用于 postgres。您还需要在 postgres 中设置一个测试数据库。

        以这种方式配置开发数据库后,您将能够:

        > rake db:schema:dump 
        

        并使用

        创建您的测试数据库
        > rake db:schema:load RAILS_ENV=test 
        

        使用生成的文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-10
          • 1970-01-01
          • 1970-01-01
          • 2020-12-19
          • 2011-07-18
          • 1970-01-01
          • 2020-07-25
          相关资源
          最近更新 更多