存在以下问题:我正在我的本地计算机上开发一些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版本相同。我该如何解决?谢谢。
答案 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,你可以从中获得一些东西!