如何设置database.yml

时间:2015-07-15 18:44:04

标签: ruby-on-rails

我正在尝试在rails上设置ruby以使用SQL Server 2005在64位Windows 7机器上本地开发。我们有一个现有的数据库并且它不符合ruby方式所以我创建了一个表来测试连通性。

无法找到有关正确配置database.yml文件的信息我怀疑我的问题就在那里。我定义了32位和64位DSN。当我运行控制台时,我得到“表不存在”

这是我的database.yml。我不知道

default: &default
  host: 111.222.333.444
  adapter: sqlserver
  mode: odbc
  dsn: DSN_Name
  database: ERP
  username: sa
  password:  ********


development:
  <<: *default
  host: 111.222.333.444
  adapter: sqlserver
  mode: odbc
  dsn: DSN_Name
  database: ERP
  username: sa
  password: ********

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3

有谁知道默认有效吗?我找不到任何关于它的信息。特别是“&lt;&lt;:* default”

我更新了我的database.yml文件。创建了一个测试表;使用复数和ID作为主键:

CREATE TABLE [dbo].[Cars](
    [ID] [int] NULL,
    [Name] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]

创建了一个模型     class Car&lt;的ActiveRecord :: Base的     端

但在连接到Car并输入'Car'后,我得到“Table not exists”。任何人都知道调试它的下一步是什么?

2 个答案:

答案 0 :(得分:1)

&default中的default: &default表示将此YAML命名空间下的键/值对作为变量*default提供。

<<: *default行正在获取这些键/值对,并使其成为其他组的一部分,因此您只需要更改与default:组不同的值。

如果您的所有数据库都在同一台计算机上,那么您的database.yml应该看起来很像这样:

default: &default
  host: 111.222.333.444
  adapter: sqlserver
  mode: odbc
  dsn: DSN_Name
  username: sa
  password: ********

development:
  <<: *default
  database: ERP_development

test:
  <<: *default
  database: ERP_test

production:
  <<: *default
  database: ERP_production

由于您使用的是sqlserver,因此您可能必须自己创建所有这些数据库(而不是让Rails为您执行此操作)。

答案 1 :(得分:0)

来自:https://github.com/rails-sqlserver/activerecord-sqlserver-adapter

  

强制架构为小写

     

虽然没有必要,但Ruby惯例是使用小写   方法名称。如果您的数据库架构是大写或大小写,我们   可以在架构反射期间强制所有表名和列名   过程是小写的。将其添加到您的config / initializers文件中   适配器。

ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true
  

架构&amp;用户

     

根据您的用户和架构设置,可能需要使用a   表名称前缀dbo ..所以在你的初始化程序中是这样的   ActiveRecord或适配器的文件。

ActiveRecord::Base.table_name_prefix = 'dbo.'