Back to all reviewers

Safe setting modifications

discourse/discourse
Based on 4 comments
Ruby

When modifying site settings during operations like imports, jobs, or plugin initialization, implement proper safeguards to prevent unintended permanent changes. Consider the impact on existing sites and provide mechanisms for restoration or warnings.

Configurations Ruby

Reviewer Prompt

When modifying site settings during operations like imports, jobs, or plugin initialization, implement proper safeguards to prevent unintended permanent changes. Consider the impact on existing sites and provide mechanisms for restoration or warnings.

Key practices:

  • Wrap temporary setting changes in restore logic or dedicated configuration steps
  • Query actual data requirements before adjusting settings (e.g., check maximum tag length before setting max_tag_length)
  • Set conditional defaults based on plugin availability rather than hardcoded values
  • Use centralized default configuration patterns like USER_OPTION_DEFAULTS instead of inline hardcoded values
  • Provide warnings when settings will be modified, especially during imports to existing sites

Example from tag import:

# Instead of hardcoding:
SiteSetting.max_tag_length = 100 if SiteSetting.max_tag_length < 100

# Query actual requirements:
max_tag_length_needed = source_db.query("SELECT MAX(LENGTH(name)) FROM tags").first
SiteSetting.max_tag_length = max_tag_length_needed if SiteSetting.max_tag_length < max_tag_length_needed

Example for conditional defaults:

# In base configuration:
USER_OPTION_DEFAULTS = {
  hide_profile: SiteSetting.default_hide_profile,
  assignable_level: Group::ALIAS_LEVELS[:nobody] # Set unconditionally with comment explaining why
}

This approach prevents configuration drift, reduces surprises for site administrators, and makes operations more predictable across different environments.

4
Comments Analyzed
Ruby
Primary Language
Configurations
Category

Source Discussions