#2 楼 @uestc_bird 那个我不懂
这个问题,我最近找到真正原因了,需要确保 API 代码存放的目录复合 Rails Autoload 的命名规范。
很多项目 (Ruby China、GitLab)早起的 API 代码在 module 命名,和文件存放的位置上是不规范的,理论上在 autoload_paths 里面加上了 lib/api 以后,就无须手动 require 的,命名符合 Rails 标准,加载会自动执行,同时 reload 的时候能正确清理。
正确的命名(Class、Module 和文件夹命名)以后,你就不会再遇到这样的错误:
Error: A copy of Gitlab::CurrentSettings has been removed from the module tree but is still active
参考:
要搞清楚这个,需要阅读 Rails Autoload 的文档。
简单来说 Rails 并没有把所有项目的文件加载到内存里面。
在 Rails 里面下面这类 (包括,但不限于) 是不会加载到内存的:
是否会进入内存,要看有没有被 require
到,这里不能直接的说都有或都没有,在 Rails 里面,有 Autoload 和 EagerLoad 两种机制,前者是按需加载,后者是启动的时候直接加载。
同时 Gem 里面的 .rb 文件也不一定都在启动的时候进入内存了的,有些可能是需要手动 require 的。
执行 rails c
,可以看到:
irb > Rails.application.config.autoload_paths
=> ["/Users/jason/work/ruby-china/lib"]
irb > Rails.application.config.eager_load_paths
=> ["/Users/jason/work/ruby-china/app/assets", "/Users/jason/work/ruby-china/app/channels", "/Users/jason/work/ruby-china/app/controllers", "/Users/jason/work/ruby-china/app/helpers", "/Users/jason/work/ruby-china/app/jobs", "/Users/jason/work/ruby-china/app/mailers", "/Users/jason/work/ruby-china/app/models", "/Users/jason/work/ruby-china/app/models/concerns", "/Users/jason/work/ruby-china/app/serializers", "/Users/jason/work/ruby-china/app/uploaders", "/Users/jason/work/ruby-china/app/channels/notifications_channel.rb", "/Users/jason/work/ruby-china/app/channels/replies_channel.rb", "/Users/jason/work/ruby-china/lib/exception_notifier"]
application.rb 里面允许配置。
同时,别忘了还有 require 的
require 'markdown'
Bundler.require(*Rails.groups)
我能说我满分 么
早起的时候是手动将注册较早的人直接设成高级会员(其实目的是又一个信任列表,Wiki 修改,Site 提交等权限),后面我们会慢慢关注活跃状态,选择性的调整。
有时间我会重新调整一下,基于用户的参与度来调整级别
办公室好漂亮!
是不是真的有必要追求 Rails/Ruby 那可能只有 10% 或者 20% 的生产力提升 ...
其实 Ruby Rails 给我们带来的不适开发效率提升,而是一套理念,引领潮流的理念,做事解决问题的方式
那个是 Grouping Conditional 不一样的,是基于 if 条件
#27 楼 @small_fish__ 我没明白你的担忧具体指的什么。
WebSockets 背后的原理我没研究过,以表现来看,连接是到一个一个机器就固定了,也是和机器无关的,有连接就能有通道接收消息,断掉以后由客户端再次发起新连接,这次可能会到其他机器。
而 Action Cable 背后涉及到数据的(例如队列)都放到 Redis 里面了。
我有另外个项目在用 Action Cable,部署是多机器的
rackup -s Puma
-s, --server SERVER serve using SERVER (thin/puma/webrick/mongrel)
就是啊 /srv 没 sudo 权限,你能发布到那里?
upstream prematurely closed connection while reading response header from upstream
看起来像是网络请求的超时时间大于了 Puma 的超时时间,导致网络请求还在处于 Wait 状态的时候 Puma / Nginx 放弃了连接