在Heroku上传后未初始化的常量错误

时间:2013-12-13 06:00:19

标签: ruby-on-rails ruby

存在以下问题:我正在我的本地计算机上开发一些Rails应用程序,一切都很好,app工作正常,但在Heroku上传后会出现以下错误(我看到它使用'heroku logs') :

NameError (uninitialized constant Api::V1::ApiV1Controller::UndefinedTokenTypeError)

我的代码:

  def require_token
    begin
      Some code which generates UndefinedTokenTypeError
    rescue UndefinedTokenTypeError => e
      render json: e.to_json
    end
  end

UndefinedTokenTypeError位于lib / errors.rb文件中:

  class EmptyCookieParamsError < StandardError
    def to_json
      { result_code: 1 }
    end
  end

  class UndefinedTokenTypeError < StandardError
    def to_json
      { result_code: 2 }
    end
  end

我的本​​地机器(2.0)上的Rails / Ruby版本相同。我该如何解决?谢谢。

2 个答案:

答案 0 :(得分:0)

在Heroku上运行将使用生产环境。检查environment / development.rb和environments / production.rb

之间的区别

您可以尝试在本地计算机rails server -e production

上以生产模式运行您的应用

我猜你的config.autoload_paths没有正确设置。应该在config / application.rb

答案 1 :(得分:0)

据我所知,您可能遇到CORS相关问题,或者您未正确认证


跨源资源共享

CORS是一个标准的HTML protocol,它基本上管理哪些网站可以&#34; ping&#34;你的网站。 Facebook&amp; Twitter的第三方小部件只能工作,因为它们允许任何网站向他们发送数据

对于Rails使用CORS,建议安装Rack-CORS gem。这样您就可以将此代码放在config/application.rb文件中:

#CORS
config.middleware.use Rack::Cors do
  allow do
     origins '*'
     resource '/data*', :headers => :any, :methods => :post
  end
end

由于您在Heroku上遇到这些问题,因此可能是您遇到的问题。即使它不是,它对于理解CORS如何工作肯定是有用的


身份验证

除非您的API是公开的,否则您可能会对请求进行身份验证

我们这样做的方法是使用authenticate_or_request_with_http_token函数,可以在这里看到:

  #Check Token
    def restrict_access
        authenticate_or_request_with_http_token do |token, options|
             user = User.exists?(public_key: token)
             @token = token if user
        end
    end

我们通过this Railscast了解了如何执行此操作,其中讨论了如何保护API。我询问你的代码的原因是因为上面的内容适用于Heroku,你可以从中获得一些东西!