What is the scope of rake in Rails - ruby-on-rails

I am very new to ruby on rails. What is the function of rake. For example here one command like
rake db:create
Here this command which is used to create the new database. But before we use rake. Why we use rake word here, what it is function.
And what is the different between rake rake-task & rakefile.
Thanks for your advice.

Rake is a Ruby build command. When you invoke rake, you are actually using the Rake tool and you ask Rake to read and use the Rakefile available in your Rails application folder.
Rake is used to automate several tasks, from the creation of a database, to a database migration, to the generation of new models or controllers.
I encourage you to read this article about Rake to learn more about this tool. It will be one of the fundamental tools you'll use working with Rails, so you really need to understand what it is before moving forward.

Rake is a gem that acts like make in the *nix world. You use it to run scripts, usually the Rakefile. You use it to run tests or set up databases. Rails uses it extensively because there are many steps that need to be run between deployments.
Rake can do pretty much anything you need to automate.

There is a Wikipedia article on it that is a good starting point: http://en.wikipedia.org/wiki/Rake_(software)
The main thing it does, really, is to be a central point for command-line tasks for the application. You don't really need it for half the things it's used for (and quite frequently isn't the best IMO), but by running rake -D you'll get a list of all the commands available, which is helpful.

Related

What should I know before changing my development database?

Since I learned Rails from Micheal Hartl's tutorial, all of my apps are set up to use SQLite3 in development, but Postgresql in production. This is causing problems with searches that work in development but not in production. From other Stack overflow questions, I've learned that using different databases in different environments is a bad idea.
I think that my best solution is to change the development database to Postgresql. But I'm sure that it's not as simple as adjusting the db name in my gemfile. What other changes will I need to make? What are some potential side effects that I should be aware of?
Thank you in advance for any insight.
You can do it two ways.
First Way :
Below are steps you can follow to convert sqlite to postgres.
Install postgres.
Change your Gemfile in your rails app and add PG gem.
Run bundle install.
Change the database.yml file to use postgres.
Run rake db:setup followed by rake db:migrate.
Everything should work as expected, Because with rake db:setup and rake db:migrate you will get identical database as before.
Second Way :
Now rails also provide way to directly change DB from one DB to another, You can check here.
Just use below command and you are done.
bin/rails db:system:change --to=postgresql
Copy Data as well :
If you want to copy data as well you can use yaml_db gem.

What is the logic behind tasks in Rake versus under `rails`

I try to grasp the logic behind some tasks being "rails" whereas others, the majority, is found as rake task. Why rails server and not rake server for example?
I can understand that the bootstrapping cannot be done in rake: after all, you first need a rakefile and other requirements before you can start using rake. So creating the project with a rails binary seems only practical.
But why generate, server, console, yet not migrate or assets? I don't see the logic. Is there any?
IMO the rails scripts are for "live" console usage, like during development.
The rake tasks are more "automated" tasks, for example, that might be run as part of a build or deploy cycle, like by a CI server. Some rake tasks might group rails/etc. commands together (like tests).
A rake script is a utility/build tool for some common tasks when developing. For example, you need to do deployment, run test, database stuffs, truncate log files, compile assets .... You can create your own custom rake scripts.
A rails script is ruby file located under script directory for the purpose of the gem rails. This is what the gem does. Rails is a ruby web framework, so the command rails is for starting the rails apps, go to rails console, generate files. It's bundled when you install the gem.
You can think of rails command like bundle command for bundler. bundle install, bundle update ... all are related to resolving gem dependencies. rspec command for running tests...
Some gems has an executable script such as rails, bundler, capistrano, whenever, rspec. Some other gems doesn't have such as builder, will_paginate....
You can check this out for how to add executable to a gem, http://guides.rubygems.org/make-your-own-gem/#adding-an-executable

how to re-initialize a ruby on rails project

I've just been given a folder containing everything in a ruby on rails project that was developed 2 years ago. The folder doesn't contain a sqlite3 file however, so I am unable to view the database and I currently don't know how to run the application on my local computer.
What are the steps to re-starting a previously developed project so that further development can be done to it?
Thanks!
Owwwwww that is hard.
I see two main problems: gem dependencies and the database.
Gem dependencies are now cleanly managed with bundler, but two years ago that was not the case.
Getting all the gems you need for your project together will be the hardest part (depending on the size of the project).
Gem dependencies
Previously gems had to be defined in config/environment.rb, but actually require could be scattered all over the app, and depending on the discipline of the original developers, I guess no versions were specified. So it will be hard to compose a set of working gems, since a lot of gems change between versions.
In config/environment.rb you will also find the rails version.
Use rvm and a clean gemset. If the rails version is something 2.3.x, you could start using bundler.
Database
If you find a config/database.yml: then you know which type of database was expected. Adapt it to connect to your database (of the same type). If there is no such thing, start off with sqlite3, as it will cope with most simple cases (it will get you started).
The simplest way to get the database up and running is
rake db:create
rake db:setup
This will create an empty database (from your configuration), and then load the schema and the seeds.
Next steps
get the tests running (hopefully there are any)
consider upgrading to rails 3
Hope this helps.
First you'll need a config/database.yml file that defines how Rails connects to your database. If that's already in there, hopefully it's not in your versioning system :)
Second, you'll need to create the databases. You can do that with rake db:create.
Third, you will need to load the database schema. DO NOT do rake db:migrate as Dave mentioned in the comment above. This is not the recommend way to load the schema since it's slower and may not accurately represent the schema. Instead, use rake db:schema:load.

Rake vs. Warbler in Ruby?

I have used Warble to make .war files. That worked pretty well.
Some of the tutorials online suggest using the "rake" command at various times. If rake is for compilation, I thought Ruby didn't need compilation. Is it a substitute for Warble? Or do these two play different functions?
When is rake meant to be used?
Rake is a tool written in Ruby for automating tasks, which you also write using a Ruby syntax. Ruby program's don't have to be built, but there are still plenty of other tasks involved in development that you can automate instead of doing yourself each time.
Some examples from Rails include migrating your database to a new schema or creating a new database.
Rake lets you write tasks with a Ruby syntax, and you can also specify dependencies between tasks, so that running one task will cause all of its dependencies to be ran first.
Think of rake as a make for Ruby. For example for one of the gems I develop, the Rakefile includes several tasks, like running all the tests (rake test) or building the gem (rake gem:build). More info on the web site:
http://rake.rubyforge.org/

Rails Dreamhost Cron Job

I'm trying to get some cron jobs going through Dreamost using their panel. I'm also using rake to execute these jobs
My rake files are located in
app/lib/tasks/example.rake
But I don't know what code to give the panel to execute them
My recommendation would be to avoid trying to do that in the first place.
Editing cron jobs manually is a pain in the ass, and rails has some nice utilities to avoid it.
There's a railscast on using the wheneverize gem to prvent these problems.
http://asciicasts.com/episodes/164-cron-in-ruby
If you want these cron jobs to be automatically updated every time you deploy to dreamhost, just put it in as part of your Capistrano deploy.rb
If you're not using Capistrano, I strongly recommend you look into:
http://www.capify.org/index.php/Capistrano
EDIT
If you do want to take the DH cron route, the following should work
cd /full/path/to/your/project && rake example
if you're using rake, you could put
rake whatevertask
in the command field

Resources