SpinaCMS / Spina

Spina CMS
http://www.spinacms.com
Other
2.19k stars 405 forks source link

NoMethodError: undefined method `translates' #346

Closed ryenski closed 6 years ago

ryenski commented 6 years ago

I was able to install Spina successfully into a blank, brand-new Rails app.

However, when running spina:bootstrap in my working app, I got the following error:

        rake  spina:bootstrap
rake aborted!
NoMethodError: undefined method `translates' for #<Class:0x00007fcf451b3570>
Did you mean?  transaction
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/page.rb:36:in `<class:Page>'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/page.rb:2:in `<module:Spina>'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/page.rb:1:in `<main>'
/Users/ryenski/.gem/ruby/2.5.0/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
/Users/ryenski/.gem/ruby/2.5.0/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:468:in `block in load_file'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:653:in `new_constants_in'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:467:in `load_file'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:365:in `block in require_or_load'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:37:in `block in load_interlock'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies/interlock.rb:14:in `block in loading'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/concurrency/share_lock.rb:151:in `exclusive'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies/interlock.rb:13:in `loading'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:37:in `load_interlock'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:348:in `require_or_load'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:502:in `load_missing_constant'
/Users/ryenski/.gem/ruby/2.5.0/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:193:in `const_missing'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:534:in `load_missing_constant'
/Users/ryenski/.gem/ruby/2.5.0/gems/bootsnap-1.2.0/lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/dependencies.rb:193:in `const_missing'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/account.rb:64:in `block in find_or_create_custom_pages'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/account.rb:63:in `each'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/account.rb:63:in `find_or_create_custom_pages'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/account.rb:51:in `bootstrap_pages'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/account.rb:45:in `bootstrap_website'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:426:in `block in make_lambda'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:236:in `block in halting_and_conditional'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:517:in `block in invoke_after'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:517:in `each'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:517:in `invoke_after'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:133:in `run_callbacks'
/Users/ryenski/.gem/ruby/2.5.0/gems/activesupport-5.2.0.rc1/lib/active_support/callbacks.rb:816:in `_run_save_callbacks'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/callbacks.rb:338:in `create_or_update'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/persistence.rb:264:in `save'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/validations.rb:46:in `save'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:310:in `block (2 levels) in save'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:386:in `block in with_transaction_returning_status'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `block in transaction'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/transaction.rb:230:in `block in within_new_transaction'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/transaction.rb:227:in `within_new_transaction'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `transaction'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:212:in `transaction'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:383:in `with_transaction_returning_status'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:310:in `block in save'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:325:in `rollback_active_record_state!'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/transactions.rb:309:in `save'
/Users/ryenski/.gem/ruby/2.5.0/gems/activerecord-5.2.0.rc1/lib/active_record/suppressor.rb:44:in `save'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/lib/tasks/spina_tasks.rake:5:in `block (2 levels) in <main>'
Tasks: TOP => spina:bootstrap
(See full trace by running task with --trace)

    Your Spina site has been succesfully installed!

    Restart your server and visit http://localhost:3000 in your browser!
    The admin backend is located at http://localhost:3000/admin.

    Site name      :  Launchpad
    Active theme   :  demo
    User email     :  admin@domain.com
    User password  :  password

It's odd that it throws the exception but then says it's successfully installed.

The Rails server then starts up successfully, but when I try to load a page I get a similar excpeption:

Started GET "/" for 127.0.0.1 at 2018-03-08 10:12:39 -0600
   (0.7ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
Processing by Spina::PagesController#homepage as HTML
Completed 401 Unauthorized in 69ms (ActiveRecord: 3.1ms)

NoMethodError (undefined method `translates' for #<Class:0x00007fadd9d4c4a0>
Did you mean?  transaction):

activerecord (5.2.0.rc1) lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/page.rb:36:in `<class:Page>'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/page.rb:2:in `<module:Spina>'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/models/spina/page.rb:1:in `<main>'
bootsnap (1.2.0) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
bootsnap (1.2.0) lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:82:in `load'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:468:in `block in load_file'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:653:in `new_constants_in'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:467:in `load_file'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:365:in `block in require_or_load'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:37:in `block in load_interlock'
activesupport (5.2.0.rc1) lib/active_support/dependencies/interlock.rb:14:in `block in loading'
activesupport (5.2.0.rc1) lib/active_support/concurrency/share_lock.rb:151:in `exclusive'
activesupport (5.2.0.rc1) lib/active_support/dependencies/interlock.rb:13:in `loading'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:37:in `load_interlock'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:348:in `require_or_load'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:502:in `load_missing_constant'
bootsnap (1.2.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:193:in `const_missing'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:534:in `load_missing_constant'
bootsnap (1.2.0) lib/bootsnap/load_path_cache/core_ext/active_support.rb:43:in `load_missing_constant'
activesupport (5.2.0.rc1) lib/active_support/dependencies.rb:193:in `const_missing'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/controllers/concerns/spina/frontend.rb:29:in `block in page_by_locale'
mobility (0.4.3) lib/mobility.rb:128:in `with_locale'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/controllers/concerns/spina/frontend.rb:28:in `page_by_locale'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/controllers/concerns/spina/frontend.rb:34:in `page'
/Users/ryenski/.gem/ruby/2.5.0/bundler/gems/Spina-399695a3e7e8/app/controllers/spina/pages_controller.rb:16:in `current_spina_user_can_view_page?'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:426:in `block in make_lambda'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:179:in `block (2 levels) in halting_and_conditional'
actionpack (5.2.0.rc1) lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:180:in `block in halting_and_conditional'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:513:in `block in invoke_before'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:513:in `each'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:513:in `invoke_before'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:131:in `run_callbacks'
actionpack (5.2.0.rc1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (5.2.0.rc1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (5.2.0.rc1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (5.2.0.rc1) lib/active_support/notifications.rb:168:in `block in instrument'
activesupport (5.2.0.rc1) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
activesupport (5.2.0.rc1) lib/active_support/notifications.rb:168:in `instrument'
actionpack (5.2.0.rc1) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (5.2.0.rc1) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
activerecord (5.2.0.rc1) lib/active_record/railties/controller_runtime.rb:24:in `process_action'
actionpack (5.2.0.rc1) lib/abstract_controller/base.rb:134:in `process'
actionview (5.2.0.rc1) lib/action_view/rendering.rb:32:in `process'
actionpack (5.2.0.rc1) lib/action_controller/metal.rb:191:in `dispatch'
actionpack (5.2.0.rc1) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (5.2.0.rc1) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
actionpack (5.2.0.rc1) lib/action_dispatch/routing/route_set.rb:34:in `serve'
actionpack (5.2.0.rc1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.0.rc1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.0.rc1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.0.rc1) lib/action_dispatch/routing/route_set.rb:840:in `call'
railties (5.2.0.rc1) lib/rails/engine.rb:524:in `call'
railties (5.2.0.rc1) lib/rails/railtie.rb:190:in `public_send'
railties (5.2.0.rc1) lib/rails/railtie.rb:190:in `method_missing'
actionpack (5.2.0.rc1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (5.2.0.rc1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (5.2.0.rc1) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.0.rc1) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.0.rc1) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.0.rc1) lib/action_dispatch/routing/route_set.rb:840:in `call'
omniauth (1.8.1) lib/omniauth/strategy.rb:190:in `call!'
omniauth (1.8.1) lib/omniauth/strategy.rb:168:in `call'
warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
warden (1.2.7) lib/warden/manager.rb:35:in `catch'
warden (1.2.7) lib/warden/manager.rb:35:in `call'
rack (2.0.4) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.0.4) lib/rack/etag.rb:25:in `call'
rack (2.0.4) lib/rack/conditional_get.rb:25:in `call'
rack (2.0.4) lib/rack/head.rb:12:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.0.4) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.4) lib/rack/session/abstract/id.rb:226:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/cookies.rb:663:in `call'
activerecord (5.2.0.rc1) lib/active_record/migration.rb:558:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (5.2.0.rc1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
web-console (3.5.1) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.5.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.5.1) lib/web_console/middleware.rb:18:in `catch'
web-console (3.5.1) lib/web_console/middleware.rb:18:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (5.2.0.rc1) lib/rails/rack/logger.rb:38:in `call_app'
railties (5.2.0.rc1) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (5.2.0.rc1) lib/active_support/tagged_logging.rb:71:in `block in tagged'
activesupport (5.2.0.rc1) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (5.2.0.rc1) lib/active_support/tagged_logging.rb:71:in `tagged'
railties (5.2.0.rc1) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
request_store (1.4.0) lib/request_store/middleware.rb:19:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.0.4) lib/rack/method_override.rb:22:in `call'
rack (2.0.4) lib/rack/runtime.rb:22:in `call'
rack-rewrite (1.5.1) lib/rack/rewrite.rb:24:in `call'
activesupport (5.2.0.rc1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-livereload (0.3.16) lib/rack/livereload.rb:23:in `_call'
rack-livereload (0.3.16) lib/rack/livereload.rb:14:in `call'
actionpack (5.2.0.rc1) lib/action_dispatch/middleware/static.rb:127:in `call'
rack (2.0.4) lib/rack/sendfile.rb:111:in `call'
webpacker (3.3.0) lib/webpacker/dev_server_proxy.rb:18:in `perform_request'
rack-proxy (0.6.4) lib/rack/proxy.rb:57:in `call'
railties (5.2.0.rc1) lib/rails/engine.rb:524:in `call'
puma (3.11.3) lib/puma/configuration.rb:225:in `call'
puma (3.11.3) lib/puma/server.rb:624:in `handle_request'
puma (3.11.3) lib/puma/server.rb:438:in `process_client'
puma (3.11.3) lib/puma/server.rb:302:in `block in run'
puma (3.11.3) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
ryenski commented 6 years ago

I am using the Spina master branch:

gem 'spina', git: 'https://github.com/SpinaCMS/Spina', branch: 'master'

ryenski commented 6 years ago

This looks like it has something to do with Devise. If I comment out devise_for in my routes file, the error goes away.

shioyama commented 6 years ago

translates is for Mobility, but I have no idea why it wouldn't be able to find the method. The only thing I can think is that maybe something is doing something to ApplicationRecord before it gets defined in Spina, which is where it extends the Mobility module...

ryenski commented 6 years ago

You are right. Turns out Devise initializes ApplicationRecord earlier than Spina in the rack stack. Since ApplicationRecord already exists it does not correctly extend with Mobility. Or something.

The solution is to add extend Mobility to the ApplicationRecord class inside the main app:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
  extend Mobility
end