小编dre*_*-hh的帖子

是否有必要为移动应用程序构建单独的API端点以访问Rails Web应用程序?

我有一个在Ruby on Rails 4中实现的Web应用程序,需要一个Android原生应用程序,我对移动开发真的很陌生.

关于移动网络架构在这种情况下应该是什么样子,我有点困惑.我在网上做了一些研究,似乎有几种方法可以做到这一点,但我仍然有一些问题,我无法找到答案.提前感谢所有指针.

1)我真的需要一个单独的API用于移动应用程序吗?使用我的Rails应用程序的现有控制器有respond_to format.json什么问题?

2)我已经看到一些在线示例建议在Rails应用程序中使用单独的API命名空间来提供移动请求,例如class Api::ApiController < ActionController::Base为新控制器,然后添加namespace :api doroutes.rb.使用这种方法,是否意味着我需要在这个新的名称空间中为移动设备复制相当多的控制器功能?

3)关于身份验证,许多示例建议使用令牌身份验证,内置的Rails会话管理框架对于移动应用程序来说还不够好吗?或者是因为会话cookie在移动应用程序中的工作方式完全不同?

感谢你的时间.

authentication api mobile restful-architecture ruby-on-rails-4

13
推荐指数
1
解决办法
1874
查看次数

eager_load = true有什么影响?

我需要知道为什么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 在开发或测试环境中使用有哪些明显的缺点?

ruby-on-rails

13
推荐指数
1
解决办法
4186
查看次数

Rails 4.2自动加载不是线程安全的

我有以下型号:

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,但问题似乎仍然存在.还有什么可以尝试缓解这个问题?

multithreading eager-loading ruby-on-rails-4

9
推荐指数
2
解决办法
2956
查看次数

运行"yarn run"时将参数传递给"node"可执行文件

可以使用各种选项启动节点.--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,它似乎是不可能的.

node.js npm yarnpkg

8
推荐指数
1
解决办法
4179
查看次数