Features
Rake Tasks
A generated Padrino project has a Rakefile that loads Padrino's tasks, so you
can run them with padrino rake or bundle exec rake:
# for a list of tasks
$ padrino rake -T
If you need custom tasks you can add those to:
your_project_/**lib/tasks**your_project_/**tasks**your_project_/**test**your_project_/**spec**
Padrino loads every *.rake file in lib/tasks and tasks (including their
subdirectories) and in test and spec.
Padrino by default has some useful tasks.
Basic
Like other frameworks we have an :environment task that loads our
environment and apps. Example:
# This is a custom task
# tasks/version.rake
task version: :environment do
puts Padrino.version
end
Routes
We have support for retrieving a list of named routes within your application for easy access.
$ padrino rake routes
which will return all the named routes for your project:
Application: SampleBlogUpdated::Admin
URL REQUEST PATH
(:sessions, :new) GET /admin/sessions/new
(:sessions, :create) POST /admin/sessions/create
(:sessions, :destroy) DELETE /admin/sessions/destroy
(:base, :index) GET /admin/
(:accounts, :index) GET /admin/accounts
(:accounts, :new) GET /admin/accounts/new
(:accounts, :create) POST /admin/accounts/create
(:accounts, :edit) GET /admin/accounts/edit/:id
(:accounts, :update) PUT /admin/accounts/update/:id
(:accounts, :destroy) DELETE /admin/accounts/destroy/:id
(:accounts, :destroy_many) DELETE /admin/accounts/destroy_many
(:posts, :index) GET /admin/posts
(:posts, :new) GET /admin/posts/new
(:posts, :create) POST /admin/posts/create
(:posts, :edit) GET /admin/posts/edit/:id
(:posts, :update) PUT /admin/posts/update/:id
(:posts, :destroy) DELETE /admin/posts/destroy/:id
(:posts, :destroy_many) DELETE /admin/posts/destroy_many
Application: SampleBlogUpdated::App
URL REQUEST PATH
(:about) GET /about_us
(:posts, :index) GET /posts(.:format)?
(:posts, :show) GET /posts/show/:id
Testing
When testing with Padrino you have a built-in padrino rake test or for rspec
padrino rake spec.
$ padrino rake test # => for bacon, shoulda
$ padrino rake spec # => for rspec
you can customize test/test.rake or spec/spec.rake
I18n
You can auto generate a yml file for localizing your models using this
command (mi:translate with Mongoid):
$ padrino rake ar:translate
See Localization for detailed instructions.
ORM
Padrino has rake tasks for ActiveRecord, Sequel, and Mongoid with some bonuses.
NOTE: we have a namespace for each orm, because of this, Padrino can mount several applications and each of them can use different orms without conflict, so that you can have multiple applications living together and one of them can use ActiveRecord, while another uses Sequel or Mongoid instead. In this way we prevent collisions.
ActiveRecord Tasks
rake ar:abort_if_pending_migrations # Raises an error if there are pending migrations
rake ar:charset # Retrieves the charset for the current environment's database
rake ar:collation # Retrieves the collation for the current environment's database
rake ar:create # Creates the database defined in config/database.yml for the current Padrino.env
rake ar:create:all # Create all the local databases defined in config/database.yml
rake ar:drop # Drops the database for the current Padrino.env
rake ar:drop:all # Drops all the local databases defined in config/database.yml
rake ar:dump # Dump the database data to a SQL file (FILE=path, default tmp/<env>_dump.sql)
rake ar:forward # Pushes the schema to the next version
rake ar:migrate # Migrate the database through scripts in db/migrate and update db/schema.rb by invoking ar:schema:dump
rake ar:migrate:down # Runs the 'down' for a given MIGRATION_VERSION
rake ar:migrate:redo # Rollbacks the database one migration and re migrate up
rake ar:migrate:reset # Resets your database using your migrations for the current environment
rake ar:migrate:up # Runs the 'up' for a given MIGRATION_VERSION
rake ar:reset # Drops and recreates the database from db/schema.rb for the current environment and loads the seeds
rake ar:rollback # Rolls the schema back to the previous version
rake ar:schema:dump # Create a db/schema.rb file that can be portably used against any DB supported by AR
rake ar:schema:load # Load a schema.rb file into the database
rake ar:setup # Create the database, load the schema, and initialize with the seed data
rake ar:structure:dump # Dump the database structure to a SQL file
rake ar:translate # Generates .yml files for I18n translations
rake ar:version # Retrieves the current schema version number
Sequel Tasks
rake sq:create # Create the database
rake sq:drop # Drop the database
rake sq:dump # Dump the database data to a SQL file (FILE=path, default tmp/<env>_dump.sql)
rake sq:migrate # Perform migration up to latest migration available
rake sq:migrate:auto # Perform automigration (reset your db data)
rake sq:migrate:down # Perform migration down (erase all data)
rake sq:migrate:to[version] # Perform migration up/down to MIGRATION_VERSION
rake sq:migrate:up # Perform migration up to latest migration available
rake sq:reset # Drop the database, migrate from scratch and initialize with the seed data
sq:create and sq:drop work with Postgres, MySQL and SQLite. For Postgres and
MySQL they connect to the database server with your app's connection settings
and run CREATE DATABASE or DROP DATABASE, so they don't need createdb,
dropdb or the mysql client installed, and they work when the server runs in
a container. sq:create does nothing when the database already exists.
To create a database that doesn't exist yet, your app must boot without
connecting to it. Projects generated with -d sequel pass test: false to
Sequel.connect in config/database.rb for this. In an older project, add it
yourself:
Sequel.connect('postgres://localhost/blog_development', loggers: [logger], test: false)
Mongoid Tasks
rake mi:cleanup_old_collections # Clean up old collections backed up by objectid_convert
rake mi:create_indexes # Create the indexes defined on your mongoid models
rake mi:drop # Drops all the collections for the database for the current Padrino.env
rake mi:objectid_convert # Convert string objectids in mongo database to ObjectID type
rake mi:translate # Generates .yml files for I18n translations
Dumping Data
db:dump (ar:dump with ActiveRecord, sq:dump with Sequel) writes the schema
and data of the current Padrino.env database to tmp/<env>_dump.sql, using the
database's own tool: pg_dump for Postgres, mysqldump for MySQL and sqlite3
for SQLite. That tool must be on your PATH. When the database server runs in a
container, run the tool inside the container instead.
$ padrino rake db:dump # => tmp/development_dump.sql
$ padrino rake db:dump -e production # => tmp/production_dump.sql
$ padrino rake db:dump FILE=backups/blog.sql
Generated projects ignore tmp/ in .gitignore, so a dump is not committed by
accident. The password reaches the tool through PGPASSWORD or MYSQL_PWD, not
the command line. A dump that fails leaves no partial file and keeps an earlier
dump at the same path. When an ActiveRecord environment has several databases,
each one goes to tmp/<env>_<name>_dump.sql, and FILE= is refused. Mongoid
projects have no dump task yet.
Seed
Like in Rails we can populate our db using db/seeds.rb here's an example (from
our padrino-admin):
email = shell.ask 'Which email do you want use for logging into admin?'
password = shell.ask 'Tell me the password to use:'
shell.say ''
account = Account.create(email: email, password: password,
password_confirmation: password, role: 'admin')
if account.valid?
shell.say 'Perfect! Your account was created.'
shell.say ''
shell.say 'Now you can start your server with padrino start and then login into /admin with:'
shell.say " email: #{email}"
shell.say " password: #{password}"
shell.say ''
shell.say "That's all!"
else
shell.say 'Sorry but some thing went wrong!'
shell.say ''
account.errors.full_messages.each { |m| shell.say " - #{m}" }
end