11 KiB
Rake Tasks Documentation
Complete reference for all available rake tasks in the hensei-api project. These tasks handle data management, image downloading, wiki synchronization, and various maintenance operations.
Quick Reference
# List all available tasks
rake -T
# List Granblue-specific tasks
rake -T granblue
# List export tasks
rake -T export
# Get detailed help for a task
rake -D granblue:import_data
Image Download Tasks
Character Images
granblue:export:character_images
Download character images with all variants and sizes.
# Download all characters
rake granblue:export:character_images
# Download specific character
rake granblue:export:character_images[3040001000]
# With options: [id,test_mode,verbose,storage,size]
rake granblue:export:character_images[3040001000,false,true,s3,grid]
# Test mode (simulate)
rake granblue:export:character_images[,true,true]
# Download only specific size for all
rake granblue:export:character_images[,false,true,both,detail]
Parameters:
id: Granblue ID or empty for alltest_mode: true/false (default: false)verbose: true/false (default: true)storage: local/s3/both (default: both)size: main/grid/square/detail (default: all)
Weapon Images
granblue:export:weapon_images
Download weapon images including elemental variants.
# Download all weapons
rake granblue:export:weapon_images
# Download specific weapon
rake granblue:export:weapon_images[1040001000]
# S3 only, grid size
rake granblue:export:weapon_images[1040001000,false,true,s3,grid]
Parameters: Same as character_images
Summon Images
granblue:export:summon_images
Download summon images with uncap variants.
# Download all summons
rake granblue:export:summon_images
# Download specific summon
rake granblue:export:summon_images[2040001000]
# Local storage only
rake granblue:export:summon_images[2040001000,false,true,local]
Parameters: Same as character_images
Job Images
granblue:export:job_images
Download job images with gender variants (wide and zoom formats).
# Download all jobs
rake granblue:export:job_images
# Download specific job
rake granblue:export:job_images[100401]
# Download only zoom images
rake granblue:export:job_images[100401,false,true,both,zoom]
# Download only wide images
rake granblue:export:job_images[,false,true,both,wide]
Parameters: Same as character_images, but size is wide/zoom
Bulk Download
granblue:download_all_images
Download all images for a type with parallel processing.
# Download with parallel threads
rake granblue:download_all_images[character,4]
rake granblue:download_all_images[weapon,8]
rake granblue:download_all_images[summon,4]
rake granblue:download_all_images[job,2]
# Download specific size with threads
rake granblue:download_all_images[character,4,grid]
rake granblue:download_all_images[weapon,8,main]
Parameters:
object: character/weapon/summon/jobthreads: Number of parallel threads (default: 4)size: Specific size to download (optional)
Data Import Tasks
Import from CSV
granblue:import_data
Import character, weapon, and summon data from CSV files.
# Import all CSV files from db/seed/updates/
rake granblue:import_data
# Test mode - validate without importing
rake granblue:import_data TEST=true
# Verbose output
rake granblue:import_data VERBOSE=true
# Both test and verbose
rake granblue:import_data TEST=true VERBOSE=true
CSV Location: db/seed/updates/
File naming: {type}_YYYYMMDD.csv
Wiki Data Tasks
Fetch Wiki Data
granblue:fetch_wiki_data
Fetch and store wiki data for game objects.
# Fetch all characters (default)
rake granblue:fetch_wiki_data
# Fetch specific type
rake granblue:fetch_wiki_data type=Weapon
rake granblue:fetch_wiki_data type=Summon
rake granblue:fetch_wiki_data type=Character
# Fetch specific item
rake granblue:fetch_wiki_data type=Character id=3040001000
rake granblue:fetch_wiki_data type=Weapon id=1040001000
# Force re-fetch even if data exists
rake granblue:fetch_wiki_data force=true
rake granblue:fetch_wiki_data type=Summon force=true
Parameters:
type: Character/Weapon/Summon (default: Character)id: Specific Granblue ID (optional)force: true/false - Re-fetch even if wiki_raw exists
Export URL Tasks
Job URLs
granblue:export:job
Export list of job image URLs to text file.
# Export icon URLs
rake granblue:export:job[icon]
# Export portrait URLs
rake granblue:export:job[portrait]
Output: export/job-{size}.txt
Export All URLs
granblue:export:all
Export all asset URLs for batch downloading.
# Export all URL lists
rake granblue:export:all
# Creates files in export/
# - character-*.txt
# - weapon-*.txt
# - summon-*.txt
# - job-*.txt
Preview Tasks
Generate Previews
previews:generate_all
Generate preview images for all parties without previews.
# Generate missing previews
rake previews:generate_all
# Processes parties with pending/failed/nil preview_state
# Uploads to S3: previews/{shortcode}.png
previews:regenerate_all
Regenerate preview images for all parties.
# Regenerate all previews (overwrites existing)
rake previews:regenerate_all
Database Tasks
Database Management
database:backup
Create database backup.
# Create timestamped backup
rake database:backup
# Output: backups/hensei_YYYYMMDD_HHMMSS.sql
database:restore
Restore database from backup.
# Restore from latest backup
rake database:restore
# Restore specific backup
rake database:restore[backups/hensei_20240315_120000.sql]
Deployment Tasks
deploy:post
Run post-deployment tasks.
# Run all post-deployment tasks
rake deploy:post
# Includes:
# - Database migrations
# - Data imports
# - Asset compilation
# - Cache clearing
Utility Tasks
Download Images
granblue:download_images
Legacy task for downloading images.
# Download images (legacy)
rake granblue:download_images
Note: Prefer using the newer export tasks.
Export Accessories
granblue:export:accessories
Export accessory data and images.
# Export all accessories
rake granblue:export:accessories
Task Patterns and Options
Common Parameters
Most tasks support these common parameters:
| Parameter | Values | Description |
|---|---|---|
test_mode |
true/false | Simulate without making changes |
verbose |
true/false | Enable detailed logging |
storage |
local/s3/both | Storage destination |
force |
true/false | Force operation even if data exists |
Environment Variables
Tasks can use environment variables:
# Test mode
TEST=true rake granblue:import_data
# Verbose output
VERBOSE=true rake granblue:import_data
# Force re-processing
FORCE=true rake granblue:fetch_wiki_data
# Custom environment
RAILS_ENV=production rake granblue:export:character_images
Parameter Passing
Two ways to pass parameters:
- Bracket notation (for defined parameters):
rake task_name[param1,param2,param3]
- Environment variables (for options):
TEST=true VERBOSE=true rake task_name
Skipping Parameters
Use commas to skip parameters:
# Skip ID, set test_mode=true, verbose=true
rake granblue:export:character_images[,true,true]
# Skip ID and test_mode, set verbose=true, storage=s3
rake granblue:export:weapon_images[,,true,s3]
Best Practices
1. Test Before Running
Always test operations first:
# Test mode
rake granblue:import_data TEST=true
# Verify output
rake granblue:export:character_images[,true,true]
# Then run for real
rake granblue:export:character_images
2. Use Parallel Processing
For bulk operations, use parallel threads:
# Good - parallel
rake granblue:download_all_images[character,8]
# Less efficient - sequential
rake granblue:export:character_images
3. Monitor Long-Running Tasks
Use verbose mode and logs:
# Enable verbose
rake granblue:export:character_images[,false,true]
# Watch logs in another terminal
tail -f log/development.log
4. Batch Large Operations
Break large operations into chunks:
# Instead of all at once
rake granblue:export:character_images
# Process specific batches
rake granblue:export:character_images[3040001000]
rake granblue:export:character_images[3040002000]
5. Check Storage Space
Before bulk downloads:
# Check local space
df -h
# Check S3 usage
aws s3 ls s3://bucket-name/ --recursive --summarize
Scheduling Tasks
Cron Jobs
Example crontab entries:
# Daily wiki data fetch at 2 AM
0 2 * * * cd /app && rake granblue:fetch_wiki_data
# Weekly image download on Sunday at 3 AM
0 3 * * 0 cd /app && rake granblue:download_all_images[character,4]
# Hourly preview generation
0 * * * * cd /app && rake previews:generate_all
Whenever Gem
Using whenever for scheduling:
# config/schedule.rb
every 1.day, at: '2:00 am' do
rake "granblue:fetch_wiki_data"
end
every :sunday, at: '3:00 am' do
rake "granblue:download_all_images[character,4]"
end
every 1.hour do
rake "previews:generate_all"
end
Troubleshooting
Task Not Found
# Check task exists
rake -T | grep task_name
# Ensure in correct directory
pwd # Should be Rails root
# Load Rails environment
rake -T RAILS_ENV=development
Permission Errors
# Check file permissions
ls -la lib/tasks/
# Fix permissions
chmod +x lib/tasks/*.rake
# Run with bundle
bundle exec rake task_name
Memory Issues
# Increase memory for large operations
export RUBY_HEAP_MIN_SLOTS=500000
export RUBY_GC_MALLOC_LIMIT=90000000
rake granblue:download_all_images[character,2]
Slow Performance
- Use parallel processing
- Run during off-peak hours
- Process in smaller batches
- Check network bandwidth
- Monitor database connections
Debugging
# Enable debug output
DEBUG=true rake task_name
# Rails console for testing
rails console
> load 'lib/tasks/task_name.rake'
> Rake::Task['task_name'].invoke
# Trace task execution
rake --trace task_name
Creating Custom Tasks
Basic Task Structure
# lib/tasks/custom.rake
namespace :custom do
desc "Description of the task"
task :task_name, [:param1, :param2] => :environment do |t, args|
# Set defaults
param1 = args[:param1] || 'default'
param2 = args[:param2] == 'true'
# Task logic
puts "Running with #{param1}, #{param2}"
# Use Rails models
Model.find_each do |record|
# Process record
end
end
end
Task with Dependencies
namespace :custom do
task :prepare do
puts "Preparing..."
end
task :cleanup do
puts "Cleaning up..."
end
desc "Main task with dependencies"
task main: [:prepare, :environment] do
puts "Running main task"
# Main logic here
Rake::Task['custom:cleanup'].invoke
end
end
Task with Error Handling
namespace :custom do
desc "Task with error handling"
task safe_task: :environment do
begin
# Risky operation
process_data
rescue StandardError => e
Rails.logger.error "Task failed: #{e.message}"
Rails.logger.error e.backtrace.join("\n")
exit 1
ensure
# Cleanup
cleanup_temp_files
end
end
end