我有一个在Ruby on Rails 4中实现的Web应用程序,需要一个Android原生应用程序,我对移动开发真的很陌生.
关于移动网络架构在这种情况下应该是什么样子,我有点困惑.我在网上做了一些研究,似乎有几种方法可以做到这一点,但我仍然有一些问题,我无法找到答案.提前感谢所有指针.
1)我真的需要一个单独的API用于移动应用程序吗?使用我的Rails应用程序的现有控制器有respond_to
format.json
什么问题?
2)我已经看到一些在线示例建议在Rails应用程序中使用单独的API命名空间来提供移动请求,例如class Api::ApiController < ActionController::Base
为新控制器,然后添加namespace :api do
routes.rb.使用这种方法,是否意味着我需要在这个新的名称空间中为移动设备复制相当多的控制器功能?
3)关于身份验证,许多示例建议使用令牌身份验证,内置的Rails会话管理框架对于移动应用程序来说还不够好吗?或者是因为会话cookie在移动应用程序中的工作方式完全不同?
感谢你的时间.
authentication api mobile restful-architecture ruby-on-rails-4
我需要知道为什么eager_load
首选false
非生产环境?我听过的其中一个论点说,eager_load
急切地将大部分Rails和应用程序加载到内存中.因此,使用eager_load进行单独测试会使其运行速度变慢.然而,这引发了一些问题,比如如何在不加载Rails和应用程序相关代码的情况下运行测试?什么是Rails和应用程序相关的代码正在急切加载?config.eager_load_namespaces
给出以下类:
ActiveSupport
ActionDispatch
ActiveModel
ActionView
ActionController
ActiveRecord
ActionMailer
Jquery::Rails::Engine
MyApp::Application
是否所有这些类及其子类都被迫加载?
eager_load = false
在开发或测试环境中使用有哪些明显的缺点?
我有以下型号:
class User < ActiveRecord::Base
def send_message(content)
MessagePoro.new(content).deliver!
end
def self.send_to_all(content)
threads = []
all.each do |user|
threads << Thread.new do
user.send_message(content)
end
end
threads.each(&:join)
end
end
Run Code Online (Sandbox Code Playgroud)
MessagePoro模型可以很简单,例如app/models/message_poro.rb:
class MessagePoro
def initialize(content)
# ...
end
def deliver!
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
现在,当我有100个用户,并且我正在运行User.send_to_all("test")时,我有时会遇到更严重的错误:
RuntimeError: Circular dependency detected while autoloading constant MessagePoro
Run Code Online (Sandbox Code Playgroud)
要么:
wrong number of arguments (1 for 0)
Run Code Online (Sandbox Code Playgroud)
我认为它必须是因为没有加载MessagePoro并且所有线程都试图同时加载它,或类似的东西.由于这些错误有时只会发生,我很确定只有当存在"竞争条件"或者有线程时才会出现这种情况.我已经尝试在启动Threads之前初始化MessagePoro,并且我已经使用了eager_loading,但问题似乎仍然存在.还有什么可以尝试缓解这个问题?
可以使用各种选项启动节点.--inspect
旗帜特别有趣:
node --inspect node_modules/.bin/jest some.spec.js
Run Code Online (Sandbox Code Playgroud)
有可能以--inspect
某种方式传递旗帜yarn run
吗?例如:
yarn run test --inspect some.spec.js
Run Code Online (Sandbox Code Playgroud)
还有一个类似的问题了npm run
,它似乎是不可能的.