Joe
Joe

Reputation: 379

How to set up database.yml

I am trying to set up ruby on rails to develop locally on a 64 bit windows 7 machine using SQL server 2005. We have an existing database and it does not conform to the ruby way so I created a table to test conectivity.

Unable to find information on properly configuring the database.yml file I suspect my problem is there. I have both 32-bit and 64-bit DSNs defined. When I run the console I get "Table doesn't exist"

Here's my database.yml. I don't know

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

Does anyone know how the default works? I can't find any information on it. Specifically "<<: *default"

I updated my database.yml file. Created a table for testing; used the plural and ID for the primary key:

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

Created a model class Car < ActiveRecord::Base end

But I get "Table doesn't exist" after connecting to Car and entering 'Car'. Anyone have any idea what the next step would be to debug this?

Upvotes: 1

Views: 4030

Answers (2)

Doon
Doon

Reputation: 20232

from: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter

Force Schema To Lowercase

Although it is not necessary, the Ruby convention is to use lowercase method names. If your database schema is in upper or mixed case, we can force all table and column names during the schema reflection process to be lowercase. Add this to your config/initializers file for the adapter.

ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true

Schemas & Users

Depending on your user and schema setup, it may be needed to use a table name prefix of dbo.. So something like this in your initializer file for ActiveRecord or the adapter.

ActiveRecord::Base.table_name_prefix = 'dbo.'

Upvotes: -1

Unixmonkey
Unixmonkey

Reputation: 18784

The &default in the line default: &default, means make the key/value pairs under this YAML namespace available as the variable *default.

The <<: *default lines are taking those key/value pairs, and making them part of the other groups, so you only need to change values that are different from the default: group.

If all your databases are on the same machine, then your database.yml should look a lot like this:

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

Since you are on sqlserver, you'll probably have to create all those databases yourself (instead of letting Rails do it for you).

Upvotes: 2

Related Questions