hensei-api/docs/rake-tasks.md

592 lines
No EOL
11 KiB
Markdown

# 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
```bash
# 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.
```bash
# 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 all
- `test_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.
```bash
# 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.
```bash
# 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).
```bash
# 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.
```bash
# 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/job
- `threads`: 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.
```bash
# 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.
```bash
# 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.
```bash
# 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.
```bash
# 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.
```bash
# 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.
```bash
# Regenerate all previews (overwrites existing)
rake previews:regenerate_all
```
## Database Tasks
### Database Management
#### `database:backup`
Create database backup.
```bash
# Create timestamped backup
rake database:backup
# Output: backups/hensei_YYYYMMDD_HHMMSS.sql
```
#### `database:restore`
Restore database from backup.
```bash
# 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.
```bash
# 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.
```bash
# Download images (legacy)
rake granblue:download_images
```
**Note:** Prefer using the newer export tasks.
### Export Accessories
#### `granblue:export:accessories`
Export accessory data and images.
```bash
# 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:
```bash
# 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:
1. **Bracket notation** (for defined parameters):
```bash
rake task_name[param1,param2,param3]
```
2. **Environment variables** (for options):
```bash
TEST=true VERBOSE=true rake task_name
```
### Skipping Parameters
Use commas to skip parameters:
```bash
# 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:
```bash
# 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:
```bash
# 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:
```bash
# 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:
```bash
# 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:
```bash
# Check local space
df -h
# Check S3 usage
aws s3 ls s3://bucket-name/ --recursive --summarize
```
## Scheduling Tasks
### Cron Jobs
Example crontab entries:
```bash
# 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:
```ruby
# 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
```bash
# 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
```bash
# Check file permissions
ls -la lib/tasks/
# Fix permissions
chmod +x lib/tasks/*.rake
# Run with bundle
bundle exec rake task_name
```
### Memory Issues
```bash
# 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
1. Use parallel processing
2. Run during off-peak hours
3. Process in smaller batches
4. Check network bandwidth
5. Monitor database connections
### Debugging
```bash
# 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
```ruby
# 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
```ruby
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
```ruby
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
```