Coder Social home page Coder Social logo

maily_herald's Issues

ng: Subscriptions never work

Whenever MailyHerald::List::create_subscription_for is called, s.active_changed? on MailyHerald::Subscription:26 is always false (because it was just created), so it never generates a schedule. Which means it never sends any emails.

I think what is missing is the following line in MailyHerald::Subscription:

    after_create :update_schedules, if: Proc.new{|s| s.active}

Add track opens and clicks

Hello, I think this is very important for an email marketing campaign.

Know how many people you sent the email opened, and also track clicks

Thank you ! I want to know if you are planning to add those features, that would make maily_herald more close to mailchimp.

Regards

Throttle email sending

Hi, I want to use maily_herald with Amazon SES, I have some limitations when sending email like send 50000 emails per 24 hour period and a send rate of 14 emails/second.

is possible to throttle email sending? so I can set it to send 14 emails per second, and also set the limit of 50000 each 24 hours.

I added the feature in the readme #4

where should be the starting point for this feature? and would be great too if the configs could be set from the webui.

Rails assets:precompile tries to connect to DB

I'm trying to deploy my application with maily_herald gem to Heroku, and it fails with this reason:

could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port xxxx?

I reproduced this on local machine

RAILS_ENV=production rake assets:precompile
and got this error:

RAILS_ENV=production rake assets:precompile --trace
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  database "my_prod_db_name" does not exist
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:665:in `rescue in connect'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:655:in `connect'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `new'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `postgresql_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_handling.rb:87:in `connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/model_schema.rb:230:in `table_exists?'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/maily_herald-0.9.2/lib/maily_herald.rb:166:in `collect'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/maily_herald-0.9.2/lib/maily_herald.rb:166:in `schema_loaded?'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/maily_herald-0.9.2/lib/maily_herald.rb:159:in `setup'
/Users/stanislav/Projects/championmailer/config/initializers/maily_herald.rb:1:in `<top (required)>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in `load'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in `block in load'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:240:in `load_dependency'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in `load'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:652:in `block in load_config_initializer'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/notifications.rb:166:in `instrument'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:651:in `load_config_initializer'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:615:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:615:in `block in <class:Engine>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in `instance_exec'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in `run'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:55:in `block in run_initializers'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:226:in `block in tsort_each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:420:in `block (2 levels) in each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:429:in `each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:419:in `block in each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:44:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:44:in `tsort_each_child'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:413:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:413:in `each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:347:in `block in each_strongly_connected_component'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:345:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:345:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:345:in `each_strongly_connected_component'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:224:in `tsort_each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:203:in `tsort_each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:54:in `run_initializers'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:352:in `initialize!'
/Users/stanislav/Projects/championmailer/config/environment.rb:5:in `<top (required)>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `block in require'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:240:in `load_dependency'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:328:in `require_environment!'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:457:in `block in run_tasks_blocks'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/sprockets-rails-2.3.3/lib/sprockets/rails/task.rb:64:in `block (2 levels) in define'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:106:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
/usr/local/var/rbenv/versions/2.2.2/bin/rake:23:in `load'
/usr/local/var/rbenv/versions/2.2.2/bin/rake:23:in `<main>'
PG::ConnectionBad: FATAL:  database "championmailer" does not exist
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:655:in `initialize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:655:in `new'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:655:in `connect'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:242:in `initialize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `new'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:44:in `postgresql_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_handling.rb:113:in `retrieve_connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_handling.rb:87:in `connection'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/model_schema.rb:230:in `table_exists?'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/maily_herald-0.9.2/lib/maily_herald.rb:166:in `collect'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/maily_herald-0.9.2/lib/maily_herald.rb:166:in `schema_loaded?'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/maily_herald-0.9.2/lib/maily_herald.rb:159:in `setup'
/Users/stanislav/Projects/championmailer/config/initializers/maily_herald.rb:1:in `<top (required)>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in `load'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in `block in load'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:240:in `load_dependency'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:268:in `load'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:652:in `block in load_config_initializer'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/notifications.rb:166:in `instrument'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:651:in `load_config_initializer'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:615:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/engine.rb:615:in `block in <class:Engine>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in `instance_exec'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:30:in `run'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:55:in `block in run_initializers'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:226:in `block in tsort_each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:420:in `block (2 levels) in each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:429:in `each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:419:in `block in each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:44:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:44:in `tsort_each_child'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:413:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:413:in `each_strongly_connected_component_from'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:347:in `block in each_strongly_connected_component'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:345:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:345:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:345:in `each_strongly_connected_component'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:224:in `tsort_each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/tsort.rb:203:in `tsort_each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/initializable.rb:54:in `run_initializers'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:352:in `initialize!'
/Users/stanislav/Projects/championmailer/config/environment.rb:5:in `<top (required)>'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `block in require'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:240:in `load_dependency'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:328:in `require_environment!'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/railties-4.2.4/lib/rails/application.rb:457:in `block in run_tasks_blocks'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/sprockets-rails-2.3.3/lib/sprockets/rails/task.rb:64:in `block (2 levels) in define'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:106:in `each'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/usr/local/var/rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
/usr/local/var/rbenv/versions/2.2.2/bin/rake:23:in `load'
/usr/local/var/rbenv/versions/2.2.2/bin/rake:23:in `<main>'
Tasks: TOP => environment

NoMethodError at /user undefined method `[]' for false:FalseClass

Following this guide step by step, after start the server and try to register a new user a confirmation email should be sent through Maily Herald

but I get this instead

NoMethodError at /user
undefined method `[]' for false:FalseClass

maily_herald (0.9.3) lib/maily_herald.rb

# Gets the Maily logger.
def logger
  unless MailyHerald::Logging.initialized?
    opts = {
      level: options[:verbose] ? Logger::DEBUG : Logger::INFO,
    }
    opts[:target] = options[:logfile] if options[:logfile]
    MailyHerald::Logging.initialize(opts)
  end

How to skip a mailing?

I'm trying to skip a mailing when a condition I provide is false.
Please see the following code snippet:

  config.sequence :paid_onboarding do |seq|
    seq.title = "Paid Onboarding"
    seq.list = :paid_users
    seq.start_at = Proc.new { |user| user.account.subscription_end - 30.days } # days that have passed since subscription will be used in absolute_delay mailings below
    seq.enable

    # I WANT TO SKIP THIS MAILING FROM BEING SENT WHEN A CONDITION I PASS RETURNS FALSE
    # For example: Time.now < (user.account.subscription_end + 45.days)
    seq.mailing :subscription_ended_email_45 do |mailing|
      mailing.title = "Subscription ended 45 days ago"
      mailing.absolute_delay = 75.days
      mailing.mailer_name = "UserMailer"
      mailing.enable
    end
  end

Question: Is maily_herald capable of handle conditionals to determine whether or not an email must be sent?
If not, what other alternatives I have to accomplish my goal?

Periodical mailings tests failing

Hi, today I pulled from your master and ran tests, this one is failing, Travis should show the build failing:

Failed examples:

rspec ./spec/models/maily_herald/periodical_mailing_spec.rb:116 # MailyHerald::PeriodicalMailing Periodical Delivery should deliver mailings periodically

Test was passing before d904758

Mail delivery stops after some time

Hello there,

First of all, thank you for programming and making maily_herald available to everyone.

I am having this problem, where mail delivery stops on its own. I am not sure if it is after a number of emails sent or after a specific amount of time. My mailing list has around 3300 emails in total, and I have noticed that mail delivery stops after about 2000 emails have been sent out (or appr. after 20 minutes since start of mailing). This has now happened twice in a row. I do not seem to have this problem with shorter mailing lists. If I stop and then re-start the Rails app, then delivery resumes and finishes without further issues.

Processes, like redis, sidekiq and paperboy, seem to be running and I cannot seem to find anything relevant in my logs.

Any ideas?

Many thanks in advance.

[Capistrano] Cannot start paperboy by defaults

Integrating MailyHerald into Capistrano results in:

03:04 maily_herald:restart
      01 /usr/share/rvm/bin/rvm 2.3.3 do bundle exec maily_herald paperboy --restart
      01 2018-11-28T04:02:58Z 8444 [Maily#cli] INFO: Started with options: {:mode=>:paperboy, :action=>:restart, :daemon=>true}
      01 You really should set a logfile if you're going to daemonize
      01
      01 /home/cems/cems/shared/bundle/ruby/2.3.0/gems/maily_herald-0.9.4/lib/maily_herald/cli.rb:200:in `daemonize'
      01 /home/cems/cems/shared/bundle/ruby/2.3.0/gems/maily_herald-0.9.4/lib/maily_herald/cli.rb:45:in `paperboy'
      01 /home/cems/cems/shared/bundle/ruby/2.3.0/gems/maily_herald-0.9.4/bin/maily_herald:10:in `<top (required)>'
      01 /home/cems/cems/shared/bundle/ruby/2.3.0/bin/maily_herald:22:in `load'
      01 /home/cems/cems/shared/bundle/ruby/2.3.0/bin/maily_herald:22:in `<top (required)>'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/cli/exec.rb:74:in `load'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/cli/exec.rb:74:in `kernel_load'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/cli/exec.rb:28:in `run'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/cli.rb:424:in `exec'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/cli.rb:27:in `dispatch'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/cli.rb:18:in `start'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/exe/bundle:30:in `block in <top (required)>'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/lib/bundler/friendly_errors.rb:124:in `with_friendly_errors'
      01 /home/cems/.rvm/gems/ruby-2.3.3/gems/bundler-1.16.4/exe/bundle:22:in `<top (required)>'
      01 /home/cems/.rvm/gems/ruby-2.3.3/bin/bundle:22:in `load'
      01 /home/cems/.rvm/gems/ruby-2.3.3/bin/bundle:22:in `<main>'
      01 /home/cems/.rvm/gems/ruby-2.3.3/bin/ruby_executable_hooks:24:in `eval'
      01 /home/cems/.rvm/gems/ruby-2.3.3/bin/ruby_executable_hooks:24:in `<main>'

Apparently, the paperboy command in the README, which starts paperboy in daemon mode, doesn't work without specifying -L option. I don't know if I'm missing anything?

Anyway:

  • Capistrano task should be fixed.
  • The paperboy command in the document should be updated, either remove --start or add -L.

Can't send Devise's confirmation_email

Error:

NoMethodError: protected method `process' called for #UserMailer:0x0055f87edc6af0

Note that everything works fine without config.parent_mailer = 'MailyHerald::Mailer' in Devise's config.

Code

User model is skipping the normal devise confirmation email

class User < ApplicationRecord
  before_create :skip_confirmation_email
  after_create :send_confirmation_email

  def send_confirmation_email
    delay.send_confirmation_instructions # have also tried without `delay`
  end

  def skip_confirmation_email
    skip_confirmation_notification!
  end
end

Devise mailer config (from your wiki)

Devise.setup do |config|
  # Configure the class responsible to send e-mails.
  config.mailer = 'UserMailer'
  config.parent_mailer = 'MailyHerald::Mailer'
end

MailyHerald setup

MailyHerald.setup do |config|
  config.ad_hoc_mailing :confirmation_instructions do |mailing|
    mailing.title = 'Confirmation Instructions'
    mailing.list = :all_users
    mailing.mailer_name = 'UserMailer'
    mailing.enable
  end
end

And the UserMailer

class UserMailer < Devise::Mailer
  helper :application # gives access to all helpers defined within `application_helper`.
  include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
  default from: '"example.net" <[email protected]>', template_path: 'devise/mailer' # to make sure that mailer uses the devise views

  def confirmation_instructions(record, opts = {})
    @token = record.confirmation_token
    devise_mail(record, :confirmation_instructions, opts)
  end
end

Full stacktrace:

NoMethodError: protected method `process' called for #<UserMailer:0x0055f87edc6af0>
Did you mean?  proc
  from action_mailer/message_delivery.rb:105:in `block in processed_mailer'
  from action_mailer/message_delivery.rb:104:in `tap'
  from action_mailer/message_delivery.rb:104:in `processed_mailer'
  from action_mailer/message_delivery.rb:95:in `deliver_now'
  from sidekiq/extensions/action_mailer.rb:33:in `deliver'
  from sidekiq/extensions/action_mailer.rb:22:in `perform'
  from sidekiq/processor.rb:152:in `execute_job'
  from sidekiq/processor.rb:134:in `block (2 levels) in process'
  from sidekiq/middleware/chain.rb:128:in `block in invoke'
  from sidekiq/middleware/server/active_record.rb:6:in `call'
  from sidekiq/middleware/chain.rb:130:in `block in invoke'
  from sidekiq/middleware/server/retry_jobs.rb:74:in `call'
  from sidekiq/middleware/chain.rb:130:in `block in invoke'
  from sidekiq/middleware/server/logging.rb:11:in `block in call'
  from sidekiq/logging.rb:32:in `with_context'
  from sidekiq/middleware/server/logging.rb:7:in `call'
  from sidekiq/middleware/chain.rb:130:in `block in invoke'
  from sidekiq/middleware/chain.rb:133:in `invoke'
  from sidekiq/processor.rb:129:in `block in process'
  from sidekiq/processor.rb:168:in `stats'
  from sidekiq/processor.rb:128:in `process'
  from sidekiq/processor.rb:80:in `process_one'
  from sidekiq/processor.rb:68:in `run'
  from sidekiq/util.rb:17:in `watchdog'
  from sidekiq/util.rb:25:in `block in safe_thread'

Rails 5 support?

Has anyone made the gem work with Rails 5?

I did some preliminary testing on Rails 5, and there are some issues.

I made maily_herald-webui work with a few tweaks on a fork that I created:
https://github.com/aldefouw/maily_herald-webui/commits/master

My changes were mainly to some out of date dependencies. I also had to tweak the version code a bit to send the appropriate number of objects to the methods for Rails 5.

The web interface seems to be working pretty well, but I can't quite seem to get any mail to deliver. It seems like it gets tripped up when it tries to process the Mailers (I can post the error I am receiving if that helps) .. so I am wondering if Rails 5 changed something about ActionMailer that is incompatible.

I will do more research and try to fix it myself, but I just didn't want to be duplicating efforts if someone else is already working on Rails 5 compatibility.

If I can't make it work for Rails 5, I'll probably be forced to use some other solution. Looks really cool what's made so far!

Thanks!

Analytics - Look into Ahoy_email

The README mentions that a number of analytics features still need to be added. What about recommending that users use ahoy_email if they'd like analytics? @ankane is an amazing developer and I highly recommend a number of his gems including Mailkick, Ahoy, Ahoy_Email, and blazer.

If users would like to see the stats within maily_herald's dashboard, the steps would be:

  1. Add a line to the README that users need to integrate ahoy_email for analytics.
  2. I can make a PR so maily_herald checks to see if the user is using ahoy_email. If the user is, then maily_herald's dashboard could pull the email analytics from the site' database. These analytics would be saved by ahoy_email.

License missing from gemspec

Some companies will only use gems with a certain license.
The canonical and easy way to check is via the gemspec
via e.g.

spec.license = 'MIT'
# or
spec.licenses = ['MIT', 'GPL-2']

There is even a License Finder to help companies ensure all gems they use
meet their licensing needs. This tool depends on license information being available in the gemspec.
Including a license in your gemspec is a good practice, in any case.

How did I find you?

I'm using a script to collect stats on gems, originally looking for download data, but decided to collect licenses too,
and make issues for missing ones as a public service :)
https://gist.github.com/bf4/5952053#file-license_issue-rb-L13 So far it's going pretty well

Configure redis_url per environment ?

How can I configure the redis_url per environment ? Is there any way to do that ?

If not, I think the way ActiveRecord handles this with ENV vars can work.

# Loads and returns the configuration of the database.
def database_configuration
  yaml = paths["config/database"].first
  if File.exist?(yaml)
    require "erb"
    YAML.load ERB.new(IO.read(yaml)).result
  elsif ENV['DATABASE_URL']
    nil
  else
    raise "Could not load database configuration. No such file - #{yaml}"
  end
rescue Psych::SyntaxError => e
  raise "YAML syntax error occurred while parsing #{paths["config/database"].first}. " \
        "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
        "Error: #{e.message}"
end

I can work on PR for this if you think is a good idea.

Thanks!

Paperboy stops

Hi, I'm using maily_herald in production, and from time to time every day paperboy stops running.
I need to be constantly checking on the email delivery and restarting the process if needed, has this happened to you?

Thanks!

Running tests

Im trying to run tests, however when I try to set up the database

rake db:setup

Rake is aborted and I get the following message:
ActiveRecord::RecordInvalid: Validation failed: List can't be blank, List can't be blank

If you provide some instructions for running tests that would be great.

debugger gem doesn't work with Ruby 2.1+

I was doing some development on this gem, I updated my Ruby version to 2.1.4 and after update gems I see that Debugger gem is no longer compatible with newer ruby versions, I suggest use byebug instead.

How to start GUI?

Just installed MH for a test spin. How do I run it/set it up?

$ maily_herald 
uninitialized constant #<Class:MailyHerald>::Pathname
/var/lib/gems/2.5.0/gems/maily_herald-0.9.4/lib/maily_herald.rb:387:in `read_options'
/var/lib/gems/2.5.0/gems/maily_herald-0.9.4/lib/maily_herald/cli.rb:99:in `setup_options'
/var/lib/gems/2.5.0/gems/maily_herald-0.9.4/lib/maily_herald/cli.rb:15:in `parse'
/var/lib/gems/2.5.0/gems/maily_herald-0.9.4/bin/maily_herald:9:in `<top (required)>'
/usr/local/bin/maily_herald:23:in `load'
/usr/local/bin/maily_herald:23:in `<main>'

Sorry, not a Ruby on Rails user... is the software too young for general users?

I can't use custome action mailer

class OutboxMailer < MailyHerald::Mailer
def newsletter outbox
end
end

OutboxMailer.newsletter(outbox)
This is occur this error
(Object doesn't support #inspect)

Html One Time Mailings Template

I started using you gem, and i wanted to know how can i send HTML email? Since everything i send using the Generic mailer is sent as plain text.

Thanks in advance!

Doesn't send devise's confirmation email

Seems like one_time_mailings don't work.
Sidekiq and paperboy are started

Screens:

image
17 minutes Ago? But stilll 'Scheduled'? Sounds wrong

image

Log says:

2016-07-05T16:17:15Z 13465 [Maily#app] DEBUG: Attempt to deliver email without schedule. No mail was sent: <User#3> Kristian Gerardsson ["[email protected]"], <MailyHerald::OneTimeMailing#1> <OneTimeMailing: Confirmation Instructions>

Without schedule? It has mailing.start_at = Proc.new { |user| user.created_at } exactly copied from the wiki page.

What am I missing? (PS: AD HOC emails work fine)

Accessing devise/cancancan helpers in initializer doesn't work

In the config/initializer/maily_herald.rb file I'd like to limit scope of available users based on who is signed in. This is a multi-tenant application that has different sets of users based on account.

In the example documentation, the scope context given is always User.all. I'm trying replace this logic using Devise or CanCanCan's current_user or current_ability helpers; eg.:

  config.context :all_users do |context|
    context.scope { User.where(:account => current_user.account) }
    context.destination {|user| user.email}
    context.attributes do |user|
      attribute_group(:user) do
        attribute(:email) {user.email}
        attribute(:created_at) {user.created_at}
      end
    end
  end

but cannot access Devise (and Devise helpers like current_user) in MailyHerald's initializer file. Any guidance is appreciated.

ng: ActionMailer is called statically

When a ActionMailer is defined, it should be instantiated before being called. Instead it is called statically, resulting in the following error:

---
:msg: |-
  protected method `process' called for #<HelloMailer:0x00007fc2edb0e368>

  $HOME/.rvm/gems/ruby-2.5.3/gems/actionmailer-6.0.3.2/lib/action_mailer/message_delivery.rb:124:in `block in processed_mailer'
  $HOME/.rvm/gems/ruby-2.5.3/gems/actionmailer-6.0.3.2/lib/action_mailer/message_delivery.rb:123:in `tap'
  $HOME/.rvm/gems/ruby-2.5.3/gems/actionmailer-6.0.3.2/lib/action_mailer/message_delivery.rb:123:in `processed_mailer'
  $HOME/.rvm/gems/ruby-2.5.3/gems/actionmailer-6.0.3.2/lib/action_mailer/message_delivery.rb:30:in `__getobj__'
  $HOME/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/delegate.rb:80:in `method_missing'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/app/models/maily_herald/mailing.rb:194:in `deliver'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/app/models/maily_herald/one_time_mailing.rb:19:in `block in run'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activerecord-6.0.3.2/lib/active_record/relation/delegation.rb:87:in `each'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activerecord-6.0.3.2/lib/active_record/relation/delegation.rb:87:in `each'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/app/models/maily_herald/one_time_mailing.rb:17:in `collect'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/app/models/maily_herald/one_time_mailing.rb:17:in `run'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/lib/maily_herald/manager.rb:25:in `block in run_all'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activerecord-6.0.3.2/lib/active_record/relation/delegation.rb:87:in `each'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activerecord-6.0.3.2/lib/active_record/relation/delegation.rb:87:in `each'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/lib/maily_herald/manager.rb:25:in `run_all'
  $HOME/.rvm/gems/ruby-2.5.3/bundler/gems/maily_herald-bd3ec31974c0/lib/maily_herald.rb:31:in `perform'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:196:in `execute_job'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
  $HOME/.rvm/gems/ruby-2.5.3/gems/rollbar-2.26.0/lib/rollbar/plugins/sidekiq/plugin.rb:11:in `call'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:163:in `block in process'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/job_retry.rb:111:in `local'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/rails.rb:14:in `block in call'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activesupport-6.0.3.2/lib/active_support/execution_wrapper.rb:88:in `wrap'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activesupport-6.0.3.2/lib/active_support/reloader.rb:72:in `block in wrap'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activesupport-6.0.3.2/lib/active_support/execution_wrapper.rb:88:in `wrap'
  $HOME/.rvm/gems/ruby-2.5.3/gems/activesupport-6.0.3.2/lib/active_support/reloader.rb:71:in `wrap'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/rails.rb:13:in `call'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:257:in `stats'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/job_logger.rb:13:in `call'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/job_retry.rb:78:in `global'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:124:in `block in dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/logger.rb:10:in `with'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/job_logger.rb:33:in `prepare'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:123:in `dispatch'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:162:in `process'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:78:in `process_one'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/processor.rb:68:in `run'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/util.rb:15:in `watchdog'
  $HOME/.rvm/gems/ruby-2.5.3/gems/sidekiq-6.1.1/lib/sidekiq/util.rb:24:in `block in safe_thread'

Newbie in Ruby on Rails, please help me get maily herald running.

Dear maily_herard team,
first, a big thank you for publishing this interesting piece of software. There aren't much satisfying free alternatives in the world of email marketing. For example, PHPList's user experience is too crappy in my opinion.

I'm having a hard time running your software. I have the feeling that the documentation you have written is intended for experienced Ruby on Rails developers, and I am not (even if I have experience in administration otherwise). Could you please elaborate on the precise steps to do from a stock Debian distro for example? For example, apt-get install this and that... setup database with $ .. and $ ...

After hours of struggle, I could successfully run the sample_app, but the emails in the lists are locked (there are a few of them prefilled, people I don't know and I can't remove - I am afraid I could spam them). I am told to edit a file somewhere, but it's too much now and I want to give up.

Something else is not clear to me. I followed various tutorials and have the impression to have setup two database systems: postgresql AND redis. Are both dbs useful?

In a nutshell: please improve documentation for RoR newbies.

uninitialized constant MailyHerald::Webui::Breadcrumbs

Screen Shot 2021-12-06 at 12 17 49 PM

ruby 2.7.4
rails 6.0.0

    maily_herald (0.9.4)
      liquid (> 2.6.1)
      rails (> 3.2)
      sidekiq
    maily_herald-webui (0.9.0)
      coffee-rails
      haml
      maily_herald (~> 0.9.2)
      sass-rails
      smart_listing (~> 1.1.0)

Stack trace:

maily_herald-webui (0.9.0) app/controllers/maily_herald/webui/application_controller.rb:4:in `<class:ApplicationController>'
maily_herald-webui (0.9.0) app/controllers/maily_herald/webui/application_controller.rb:3:in `<module:Webui>'
maily_herald-webui (0.9.0) app/controllers/maily_herald/webui/application_controller.rb:2:in `<module:MailyHerald>'
maily_herald-webui (0.9.0) app/controllers/maily_herald/webui/application_controller.rb:1:in `<main>'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
skylight-core (4.3.0) lib/skylight/core/probes.rb:118:in `require'
zeitwerk (2.3.0) lib/zeitwerk/kernel.rb:16:in `require'
maily_herald-webui (0.9.0) app/controllers/maily_herald/webui/dashboard_controller.rb:2:in `<module:MailyHerald>'
maily_herald-webui (0.9.0) app/controllers/maily_herald/webui/dashboard_controller.rb:1:in `<main>'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
bootsnap (1.4.6) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
skylight-core (4.3.0) lib/skylight/core/probes.rb:118:in `require'
zeitwerk (2.3.0) lib/zeitwerk/kernel.rb:16:in `require'
activesupport (6.0.2.2) lib/active_support/inflector/methods.rb:284:in `const_get'
activesupport (6.0.2.2) lib/active_support/inflector/methods.rb:284:in `block in constantize'
activesupport (6.0.2.2) lib/active_support/inflector/methods.rb:280:in `each'
activesupport (6.0.2.2) lib/active_support/inflector/methods.rb:280:in `inject'
activesupport (6.0.2.2) lib/active_support/inflector/methods.rb:280:in `constantize'
activesupport (6.0.2.2) lib/active_support/dependencies/zeitwerk_integration.rb:19:in `constantize'
actionpack (6.0.2.2) lib/action_dispatch/http/request.rb:88:in `controller_class_for'
actionpack (6.0.2.2) lib/action_dispatch/http/request.rb:81:in `controller_class'
actionpack (6.0.2.2) lib/action_dispatch/routing/route_set.rb:45:in `controller'
actionpack (6.0.2.2) lib/action_dispatch/routing/route_set.rb:31:in `serve'
actionpack (6.0.2.2) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.2.2) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.2.2) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.2.2) lib/action_dispatch/routing/route_set.rb:837:in `call'
skylight-core (4.3.0) lib/skylight/core/probes/action_dispatch/routing/route_set.rb:14:in `block in call'
skylight-core (4.3.0) lib/skylight/core/fanout.rb:25:in `instrument'
skylight-core (4.3.0) lib/skylight/core/probes/action_dispatch/routing/route_set.rb:13:in `call'
railties (6.0.2.2) lib/rails/engine.rb:526:in `call'
railties (6.0.2.2) lib/rails/railtie.rb:190:in `public_send'
railties (6.0.2.2) lib/rails/railtie.rb:190:in `method_missing'
actionpack (6.0.2.2) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (6.0.2.2) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (6.0.2.2) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.2.2) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.2.2) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.2.2) lib/action_dispatch/routing/route_set.rb:837:in `call'
skylight-core (4.3.0) lib/skylight/core/probes/action_dispatch/routing/route_set.rb:14:in `block in call'
skylight-core (4.3.0) lib/skylight/core/fanout.rb:25:in `instrument'
skylight-core (4.3.0) lib/skylight/core/probes/action_dispatch/routing/route_set.rb:13:in `call'
rack (2.2.2) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.2) lib/rack/etag.rb:27:in `call'
rack (2.2.2) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.2) lib/rack/head.rb:12:in `call'
actionpack (6.0.2.2) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.2.2) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.2) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/cookies.rb:648:in `call'
activerecord (6.0.2.2) lib/active_record/migration.rb:567:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.2.2) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.2.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
web-console (4.0.1) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.0.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.0.1) lib/web_console/middleware.rb:17:in `catch'
web-console (4.0.1) lib/web_console/middleware.rb:17:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (6.0.2.2) lib/rails/rack/logger.rb:38:in `call_app'
railties (6.0.2.2) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (6.0.2.2) lib/active_support/tagged_logging.rb:80:in `block in tagged'
activesupport (6.0.2.2) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (6.0.2.2) lib/active_support/tagged_logging.rb:80:in `tagged'
railties (6.0.2.2) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/request_id.rb:27:in `call'
skylight-core (4.3.0) lib/skylight/core/probes/action_dispatch/request_id.rb:12:in `call'
rack (2.2.2) lib/rack/method_override.rb:24:in `call'
rack (2.2.2) lib/rack/runtime.rb:22:in `call'
activesupport (6.0.2.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/static.rb:126:in `call'
rack (2.2.2) lib/rack/sendfile.rb:110:in `call'
actionpack (6.0.2.2) lib/action_dispatch/middleware/host_authorization.rb:83:in `call'
honeybadger (4.6.0) lib/honeybadger/rack/error_notifier.rb:33:in `block in call'
honeybadger (4.6.0) lib/honeybadger/agent.rb:399:in `with_rack_env'
honeybadger (4.6.0) lib/honeybadger/rack/error_notifier.rb:30:in `call'
honeybadger (4.6.0) lib/honeybadger/rack/user_feedback.rb:31:in `call'
honeybadger (4.6.0) lib/honeybadger/rack/user_informer.rb:21:in `call'
webpacker (5.1.1) lib/webpacker/dev_server_proxy.rb:25:in `perform_request'
rack-proxy (0.6.5) lib/rack/proxy.rb:57:in `call'
railties (6.0.2.2) lib/rails/engine.rb:526:in `call'
rack (2.2.2) lib/rack/handler/webrick.rb:95:in `service'
/Users/grace/.rbenv/versions/2.7.4/lib/ruby/2.7.0/webrick/httpserver.rb:140:in `service'
/Users/grace/.rbenv/versions/2.7.4/lib/ruby/2.7.0/webrick/httpserver.rb:96:in `run'
/Users/grace/.rbenv/versions/2.7.4/lib/ruby/2.7.0/webrick/server.rb:307:in `block in start_thread' 

Say Thank you!

I just wanted to say Thank you for this great job, you Rock! I will add my contributions soon!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.