Ruby on Rails Sunday, October 2, 2016

Faced a similar problem today and thought I'd post my solution. To figure this out I looked through the rails database.rake codebase: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L16


ActiveRecord::Base.configurations["newdb"] = {
 
"adapter" => 'mysql2',
 
"encoding" => 'utf8',
 
"reconnect" => false,
 
"database" => 'newdb',
 
"pool" => 5,
 
"username" => '[username]',
 
"password" => '[password]',
 
"host" => '127.0.0.1',
 
"port" => 3306,
}
ActiveRecord::Tasks::DatabaseTasks.env = 'newdb'
ActiveRecord::Tasks::DatabaseTasks.create # Creates the database, empty.
ActiveRecord::Tasks::DatabaseTasks.migrate # Runs migrations against the new empty database.




On Wednesday, 17 February 2016 23:03:59 UTC+11, Pedro Marques wrote:
Hello!

I know three years have passed, but I am looking to do exactly what you proposed on your first post, so I am interested in knowing if you have managed to so and if you did, how did you do it?

Thanks in advance.

quinta-feira, 4 de Abril de 2013 às 05:24:18 UTC-4, Johan Vauhkonen escreveu:
That kind of scenario was what I had initially in mind. Everyone has
the same models, just not the same database.

2013/4/4, Simon Macneall <macn...@gmail.com>:
> We have toyed with creating separate databases for each customer as our
> combined one is starting to get quite large. In our case, the models will
> always be the same no matter which database you are connecting to, so
> there isn't any meta-programming involved. It's just a case of switching
> databases to the correct one for that customer once they log into the
> system.
>
> One thing to consider is that shared data needs to go somewhere (sessions,
>
> username/passwords etc) as well.
>
> Cheers
> Simon
>
>
>
>
>
> On Thu, 04 Apr 2013 16:34:21 +0800, Julian Leviston
> <jul...@coretech.net.au> wrote:
>
>> Okay...
>>
>> So to do this, you need to understand meta-programming to a degree
>> because that's what you're doing.
>>
>> In normal Rails, you'd create a model as part of the development
>> process, but what you're doing is creating some code that creates models
>>
>> itself (ie one level of abstraction higher than normal).
>>
>> The equivalent straight ruby comparison is: (compare 1, with 2, below):
>>
>> 1. Creating a class (this is normal programming)
>>
>> class Cat
>>   def hi
>>     puts 'meow'
>>   end
>> end
>>
>> You can then create new Cat objects like this:
>> furrycat = Cat.new
>>
>> and make it meow like this:
>> furrycat.hi
>>
>> 2. Creating a piece of code that creates a class (this is
>> meta-programming)
>>
>> a_class = Class.new
>> hi_method_block = Proc.new{ puts 'meow' }
>> a_class.send(:define_method, :hi, &hi_method_block)
>>
>> You can then create new "Cat" objects like this:
>> furrycat = a_class.new
>>
>> and make it meow like this:
>> furrycat.hi
>>
>> ---
>>
>> So...  assuming you followed that, then you'll understand that you could
>>
>> do the same thing with ActiveRecord::Base classes, which is what forms
>> the bases for Active Record model classes. This is how you'd dynamically
>>
>> LOAD one of your programmatically generated models. Creating the table
>> is just a matter of executing some arbitrary SQL which can be built
>> using ActiveRecord::Base.connection.execute. (Eg to run a count of a
>> fictitious users table, you'd do this:
>> ActiveRecord::Base.connection.execute("SELECT COUNT(*) FROM users;")
>>
>> However, like I said, there's no point trying to do this until you can
>> walk, because this really is running. Most Rails devs hardly ever get
>> into this stuff. I've been a Rails developer since 2005, and I've only
>> done this sort of dynamic table and database thing once or twice in
>> practice.
>>
>> Julian
>>
>> On 04/04/2013, at 6:43 PM, Johan Vauhkonen <johan.v...@gmail.com>
>> wrote:
>>
>>> Thanks for posting, I appreciate the feedback.
>>>
>>> I'll start with keeping everything within a single database and take it
>>>
>>> from there.
>>>
>>> You are right Julian in that I am new with RoR and what I've asked for
>>> is advanced.
>>>
>>> I'm still curious though how creating databases dynamically would be
>>> done so if it's explained anywhere I'd love to read it!
>>>
>>>
>>> 2013/4/4 Julian Leviston <jul...@coretech.net.au>
>>>
>>> On 04/04/2013, at 6:05 PM, Johan Vauhkonen <johan.v...@gmail.com>
>>> wrote:
>>>
>>> > Thanks for replying, Julian.
>>> >
>>> > Can you point me to any resources that describe how to do it?
>>> >
>>> > I agree that I should not optimize prematurely but what I'm
>>> considering is which is easier,
>>> > to go with dynamically creating databases from the start or to
>>> extract data from the single database to new databases later on?
>>> >
>>> > It's at least something to keep in the back of my mind.
>>>
>>> Hi,
>>>
>>> You shouldn't attempt to do this if you don't already understand enough
>>>
>>> Ruby / Rails to do it yourself.
>>>
>>> So, I suggest sticking with what you *can* do first.
>>>
>>> This might sound like a cop out, but there's very good reason. It's
>>> very advanced Rails and you really shouldn't attempt something like
>>> this until you understand the basics really well IMHO.
>>>
>>> Julian
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "Ruby on Rails: Talk" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/rubyonrails-talk/S73DxPeqvy4/unsubscribe?hl=en-US.
>>> To unsubscribe from this group and all its topics, send an email to
>>> rubyonrails-ta...@googlegroups.com.
>>> To post to this group, send email to rubyonra...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Ruby on Rails: Talk" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to rubyonrails-ta...@googlegroups.com.
>>> To post to this group, send email to rubyonra...@googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/rubyonrails-talk/S73DxPeqvy4/unsubscribe?hl=en-US.
> To unsubscribe from this group and all its topics, send an email to
> rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/67ab61b2-6fe7-420b-aa8f-a3c808cefcff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment