Skip to content

Commit

Permalink
Fix mastodon:setup to take dotenv/docker-compose differences into acc…
Browse files Browse the repository at this point in the history
…ount (mastodon#16896)

In order to work around mastodon#16895,
add a warning to .env.production.sample, and change the mastodon:setup rake
task to:
- output a warning if a variable will be interpreted differently by dotenv
  and docker-compose
- ensure the printed config is compatible with docker-compose
  • Loading branch information
ClearlyClaire authored and kadoshita committed Nov 6, 2021
1 parent 257dfcb commit 803c2d4
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
6 changes: 6 additions & 0 deletions .env.production.sample
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
# not demonstrate all available configuration options. Please look at
# https://docs.joinmastodon.org/admin/config/ for the full documentation.

# Note that this file accepts slightly different syntax depending on whether
# you are using `docker-compose` or not. In particular, if you use
# `docker-compose`, the value of each declared variable will be taken verbatim,
# including surrounding quotes.
# See: https://github.com/mastodon/mastodon/issues/16895

# Federation
# ----------
# This identifies your server and cannot be changed safely later
Expand Down
15 changes: 13 additions & 2 deletions lib/tasks/mastodon.rake
Original file line number Diff line number Diff line change
Expand Up @@ -333,8 +333,12 @@ namespace :mastodon do
prompt.say 'This configuration will be written to .env.production'

if prompt.yes?('Save configuration?')
incompatible_syntax = false

env_contents = env.each_pair.map do |key, value|
if value.is_a?(String) && value =~ /[\s\#\\"]/
incompatible_syntax = true

if value =~ /[']/
value = value.to_s.gsub(/[\\"\$]/) { |x| "\\#{x}" }
"#{key}=\"#{value}\""
Expand All @@ -346,12 +350,19 @@ namespace :mastodon do
end
end.join("\n")

File.write(Rails.root.join('.env.production'), "# Generated with mastodon:setup on #{Time.now.utc}\n\n" + env_contents + "\n")
generated_header = "# Generated with mastodon:setup on #{Time.now.utc}\n\n"

if incompatible_syntax
generated_header << "Some variables in this file will be interpreted differently whether you are\n"
generated_header << "using docker-compose or not.\n\n"
end

File.write(Rails.root.join('.env.production'), "#{generated_header}#{env_contents}\n")

if using_docker
prompt.ok 'Below is your configuration, save it to an .env.production file outside Docker:'
prompt.say "\n"
prompt.say File.read(Rails.root.join('.env.production'))
prompt.say "#{generated_header}#{env.each_pair.map { |key, value| "#{key}=#{value}" }.join("\n")}"
prompt.say "\n"
prompt.ok 'It is also saved within this container so you can proceed with this wizard.'
end
Expand Down

0 comments on commit 803c2d4

Please sign in to comment.