1) I usually do 1.3:
def self.connect env
App::Models::Base.establish_connection App.config[env]['db_connection']
App::Models::Base.logger = Logger.new File.dirname(__FILE__) +
App.config[env]['db_log']
end
def self.create env = 'dev'
self.connect env
self.create_schema
end
2) I've never tried it without specifying the adapter, I figure it
can't hurt to keep it in there. Plus it makes all the env's in my
config file look the same.
3) So long as it's using migrations (the < V /d after the class name)
it won't delete anything by running a connect again after the db has
been created.
class CreateApp < V 1.0
def self.up
create_table User.table_name do |t|
t.string :name
t.timestamps
end
end
def self.down
drop_table User.table_name
end
end
Dave
On Tue, May 15, 2012 at 1:39 PM, Dave Everitt wrote:
> I know this isn't Python, but I'd like to get a view on the 'one obvious'
> way to set up an SQLite (or other) database and its location per-app. I've
> got a bit lost with the Camping 2 changes and various code snippets I have
> kicking around.
>
> 1.
> is it best to set up the DB creation/connection:
>
> 1.1
> at the end of the app
>
> AppName::Models::Base.establish_connection(
> :adapter => 'sqlite3',
> :database => '/path/to/my/app/myApp.db'
> )
> run AppName #from an old snippet
>
> 1.2
> OR
> like this (postgres) example [Magnus]:
>
> def List.create
> List::Models::Base.establish_connection(
> :adapter => "postgresql",
> :username => "root",
> :password => "toor,
> :database => "list"
> )
> List::Models.create_schema
> end
>
> 1.3
> in a config/database.yml file [Magnus] (probably not worth it for SQLite):
> ---
> adapter: postgresql
> username: root
> password: toor
> database: mycampingdb
>
> And then do:
>
> require 'yaml'
>
> def AppName.create
> AppName::Models::Base.establish_connection(YAML.load(File.read("database.yml")))
> AppName::Models.create_schema
> end
>
>
> 2.
> since sqlite is the default, is it necessary to set :adapter explicitly if
> that's what I'm using?
>
> def AppName.create
> AppName::Models::Base.establish_connection(
> :adapter => 'sqlite3',
> :database => '/path/to/my/app/.camping.db'
> )
> end
>
>
> 3.
> Since .create is *only needed once* to set up the database (Magnus: "if you
> connect to a database which already has the tables, DON'T run
> `AppName::Models.create_schema` as this will probably delete the whole
> database.") what do we do with this after the first run:
>
> def AppName.create
> AppName::Models.create_schema
> end
>
> 3.1 delete it after the db is created on the first run?
> 3.2 check if the db already exists (best way, please)?
> 3.3 check like this (never understood ':assume'?):
> AppName::Models.create_schema :assume => (AppName::Models::
> table_name.table_exists? ? 1.0 : 0.0)
> or could we do something simpler like (?):
> AppName::Models.create_schema unless table_exists?(table_name)
> ?
>
> 4.
> There's also this from a previous post (opinions please?):
>
> "On the part of migrations ... "def self.up" and "def self.down" ... gave me
> errors for some reason. But ... it should be updated to "def self.change"
> ... that's the modern way of doing it."
>
> DaveE
>
> ___
> Camping-list mailing list
> Camping-list@rubyforge.org
> http://rubyforge.org/mailman/listinfo/camping-list
--
Dave
___
Camping-list mailing list
Camping-list@rubyforge.org
http://rubyforge.org/mailman/listinfo/camping-list