pglombardo / PasswordPusher

🔐 Securely share sensitive information with automatic expiration & deletion after a set number of views or duration. Track who, what and when with full audit logs.
https://pwpush.com
Apache License 2.0
1.79k stars 329 forks source link

Setting theme in environment of a service file fails #2250

Closed Stricken1670 closed 3 weeks ago

Stricken1670 commented 3 weeks ago

I compiled PWP from source, works fine, I can set almost anything, but not the theme. So reading the config I noticed I had to set the theme in the environment, which I did in the service file, like this:

[Unit]
Description=run password helper site
Wants=network.target network-online.target
After=network.target network-online.target

[Service]
Type=simple
User=frodo
WorkingDirectory=/home/frodo/src/PasswordPusher/
ExecStart=/home/frodo/src/PasswordPusher/bin/rails server
ExecStopPost=pkill puma
Restart=on-failure
Environment="PWP__THEME=darkly"

[Install]
WantedBy=multi-user.target

But the theme is not affected. Please advise.

github-actions[bot] commented 3 weeks ago

Hello @Stricken1670, thanks for contributing to the Password Pusher community! We will respond as soon as possible.

pglombardo commented 3 weeks ago

Hi @Stricken1670 - Great job. The theme from that environment variable is assigned here.

After that, you have to re-compile the bundled assets for the new theme with bundle exec assets:precompile - do this only for RAILS_ENV=production though. In dev it can cause issues/confusion.

So you probably want to add RAILS_ENV=production as well.

All of this is done automatically for other users in the Docker container. See the Dockerfile & entrypoint.sh for reference if you like here.

Stricken1670 commented 3 weeks ago

Hello @pglombardo Thanks for the feedback. This results in the following error:

frodo@frodo ~/src/PasswordPusher %  <master> bundle exec assets:precompile RAILS_ENV=production
bundler: command not found: assets:precompile
Install missing gem executables with `bundle install`

And running bundle install doesn't fix it.

pglombardo commented 3 weeks ago

My bad. Try this instead: bin/rails assets:precompile

Stricken1670 commented 3 weeks ago

Awesome, that does the trick. :-)

pglombardo commented 3 weeks ago

Ok great - but even better is RAILS_ENV=production bin/rails assets:precompile to assure it's done in the right env.

Stricken1670 commented 3 weeks ago

Sure, I didn't forget that hint, I even put that in frodo's shell environment settings, and the service file, so it will never be forgotten. :-)

Stricken1670 commented 3 weeks ago

Oh... adding Environment="RAILS_ENV=production" to the service file results in the following crash:

Jun 13 13:38:07 frodo rails[4653]: => Booting Puma
Jun 13 13:38:07 frodo rails[4653]: => Rails 7.1.3.4 application starting in production
Jun 13 13:38:07 frodo rails[4653]: => Run `bin/rails server --help` for more startup options
Jun 13 13:38:07 frodo rails[4653]: Exiting
Jun 13 13:38:07 frodo rails[4653]: /home/frodo/src/PasswordPusher/config/environments/production.rb:167:in `block in <main>': uninitialized constant Rack::Throttle (NameError)
Jun 13 13:38:07 frodo rails[4653]:     config.middleware.use Rack::Throttle::Daily, max: Settings.throttling.daily
Jun 13 13:38:07 frodo rails[4653]:                               ^^^^^^^^^^
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/railtie.rb:257:in `instance_eval'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/railtie.rb:257:in `configure'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/config/environments/production.rb:5:in `<main>'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/bundled_gems.rb:74:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/bundled_gems.rb:74:in `block (2 levels) in replace_require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/zeitwerk-2.6.15/lib/zeitwerk/kernel.rb:34:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/engine.rb:568:in `block (2 levels) in <class:Engine>'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/engine.rb:567:in `each'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/engine.rb:567:in `block in <class:Engine>'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/initializable.rb:32:in `instance_exec'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/initializable.rb:32:in `run'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/initializable.rb:61:in `block in run_initializers'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:231:in `block in tsort_each'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:353:in `block (2 levels) in each_strongly_connected_component'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:425:in `block (2 levels) in each_strongly_connected_component_from'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:434:in `each_strongly_connected_component_from'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:424:in `block in each_strongly_connected_component_from'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/initializable.rb:50:in `each'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/initializable.rb:50:in `tsort_each_child'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:418:in `call'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:418:in `each_strongly_connected_component_from'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:352:in `block in each_strongly_connected_component'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:350:in `each'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:350:in `call'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:350:in `each_strongly_connected_component'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:229:in `tsort_each'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/tsort.rb:208:in `tsort_each'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/initializable.rb:60:in `run_initializers'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/application.rb:426:in `initialize!'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/config/environment.rb:7:in `<main>'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/bundled_gems.rb:74:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/bundled_gems.rb:74:in `block (2 levels) in replace_require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/zeitwerk-2.6.15/lib/zeitwerk/kernel.rb:34:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from config.ru:5:in `block (2 levels) in <main>'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rack-3.1.2/lib/rack/builder.rb:108:in `eval'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rack-3.1.2/lib/rack/builder.rb:108:in `new_from_string'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rack-3.1.2/lib/rack/builder.rb:97:in `load_file'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rack-3.1.2/lib/rack/builder.rb:67:in `parse_file'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rackup-2.1.0/lib/rackup/server.rb:354:in `build_app_and_options_from_config'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rackup-2.1.0/lib/rackup/server.rb:263:in `app'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rackup-2.1.0/lib/rackup/server.rb:424:in `wrapped_app'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rackup-2.1.0/lib/rackup/server.rb:326:in `block in start'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rackup-2.1.0/lib/rackup/server.rb:382:in `handle_profiling'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/rackup-2.1.0/lib/rackup/server.rb:325:in `start'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/commands/server/server_command.rb:38:in `start'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/commands/server/server_command.rb:145:in `block in perform'
Jun 13 13:38:07 frodo rails[4653]:         from <internal:kernel>:90:in `tap'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/commands/server/server_command.rb:136:in `perform'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/command/base.rb:178:in `invoke_command'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/thor-1.3.1/lib/thor.rb:527:in `dispatch'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/command/base.rb:73:in `perform'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/command.rb:71:in `block in invoke'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/command.rb:149:in `with_argv'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/command.rb:69:in `invoke'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/railties-7.1.3.4/lib/rails/commands.rb:18:in `<main>'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/bundled_gems.rb:74:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /usr/share/ruby/bundled_gems.rb:74:in `block (2 levels) in replace_require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
Jun 13 13:38:07 frodo rails[4653]:         from /home/frodo/src/PasswordPusher/bin/rails:6:in `<main>'
Jun 13 13:38:07 frodo systemd[1]: passwordpusher.service: Main process exited, code=exited, status=1/FAILURE
pglombardo commented 3 weeks ago

From source is always a bit more complicated. The solution should be:

RAILS_ENV=production bundle install

first - and then the precompile.

Stricken1670 commented 3 weeks ago

hmmmno, that doesn't fix it, still the same error. Does this warning matter?

warning: parser/current is loading parser/ruby33, which recognizes 3.3.2-compliant syntax, but you are running 3.3.1.

I'd prefer to stick with packages provided.

pglombardo commented 3 weeks ago

By all means - use what you feel is best. This is why I usually advise against source - it's always a bit more complicated to setup initially.

That error is non-critical. If you update to Ruby 3.3.2 it'll go away.

Stricken1670 commented 3 weeks ago

OK, it's not that important. The interface works perfectly without setting that ENV variable.