启动rails控制台抛出错误

时间:2016-01-21 14:31:51

标签: ruby-on-rails ruby

直到昨天,我可以使用rails应用程序根目录下的rails c快捷方式启动rails控制台。该应用程序设置为仅API应用程序,以提供我的角度前端。当我昨晚尝试启动它时出现以下错误:

Running via Spring preloader in process 5967
/Users/Andrew/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5/lib/action_dispatch/middleware/stack.rb:90:in `insert': can't modify frozen Array (RuntimeError)
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5/lib/action_dispatch/middleware/stack.rb:90:in `insert'
    from /Users/Andrew/sites/mine/K24/api/config/application.rb:15:in `<class:Application>'
    from /Users/Andrew/sites/mine/K24/api/config/application.rb:10:in `<module:Api>'
    from /Users/Andrew/sites/mine/K24/api/config/application.rb:9:in `<top (required)>'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `require'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `block in require'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `require'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:141:in `require_application_and_environment!'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:67:in `console'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `require'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `block in require'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:274:in `require'
    from /Users/Andrew/sites/mine/K24/api/bin/rails:9:in `<top (required)>'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `block in load'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency'
    from /Users/Andrew/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
    from /Users/Andrew/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /Users/Andrew/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from -e:1:in `<main>'

根据这个错误,它抱怨application.rb file我在文件夹上运行了差异问题,并发现差异只是以下“

  1. application.rb我仅删除了评论。
  2. 在路线文件中,我添加了几条新路线:

    发布“更新”,发布到:“发布#update”

  3. 我尝试通过执行以下操作来解决此问题:

    • 停止并重新启动Spring
    • 删除了其他路线(即更新路线)
    • 根据此post我尝试将该行添加到application.rb文件中:

      (注意 - 出于某种原因,这不会格式化为代码块) config.autoload_paths + =%W {#{config.root} / lib}

    有关为何发生这种情况的任何建议?

    编辑

    发布application.rb文件的内容:

    require File.expand_path('../boot', __FILE__)
    
    require 'rails/all'
    
    # Require the gems listed in Gemfile, including any gems
    # you've limited to :test, :development, or :production.
    Bundler.require(*Rails.groups)
    
    module Api
      class Application < Rails::Application
        # Settings in config/environments/* take precedence over those specified here.
        # Application configuration should go into files in config/initializers
        # -- all .rb files in that directory are automatically loaded.
    
        # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
        # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
        # config.time_zone = 'Central Time (US & Canada)'
    
        # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
        # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
        # config.i18n.default_locale = :de
    
        config.api_only = true
        # Do not swallow errors in after_commit/after_rollback callbacks.
        config.active_record.raise_in_transactional_callbacks = true
    
        config.middleware.insert_before 0, "Rack::Cors", :debug => true, :logger => (-> { Rails.logger }) do
          allow do
            origins '*'
    
            resource '/cors',
              :headers => :any,
              :methods => [:post]
    
            resource '*',
              :headers => :any,
              :methods => [:get, :post, :delete, :put, :options, :head],
              :max_age => 0
          end
        end
      end
    end
    

2 个答案:

答案 0 :(得分:1)

我认为问题在于这一行:Bundler.require(*Rails.groups)

在启动控制台之前,捆绑器会尝试通过该行启动您的宝石。 检查你的Gemfile。您是否定义了任何组(测试,开发等)?

您可能希望尝试使用此代码:Bundler.require(:default, :assets, Rails.env)

答案 1 :(得分:0)

我对barr-code的回答的编辑似乎没有得到批准,但是我给了她+1,因为它引导我得到以下答案。

实际问题是开发环境下的gem spring实际上导致了问题。评论t out允许我访问rails控制台 - 这解决了上述问题,但这意味着该应用程序会引发另一个错误can't find a helper

所以我现在所做的实际上是根据需要在两者之间切换 - 不理想,但这确实意味着我可以继续发展。