592 lines
No EOL
11 KiB
Markdown
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
|
|
``` |