分享 翻译 Guides 时觉得特别的点

ichord · 2012年04月09日 · 最后由 ichord 回复于 2012年04月09日 · 3911 次阅读

我在翻译 Rails Guides 的时候,发现有些配置挺有意思的. 在这里列出来,并说下我觉得有意思的点。

config.consider_all_requests_local

这个参数是设置错误信息中是否带有详细的调试信息。在开发和测试环境的默认开启的。 生产环境当然就不开启。但如果在生产环境中我们不得查看某些错误的详细调试信息, 怎么办?Guides 有顺带说道方法:

在 controller 里面实现 local_request? 方法。 这样就可以指定哪些请求会显示详细的调试信息。

具体怎么实现嘛,Guides 就没有说了。

config.asset_host

这个参数用于指定资源主机,负载比较重的应用很多时候会用单独的服务器 (群) 来管理静态数据。所以,可以在这里指定地址。更有意思 的是,Guides 提到了另一个关于加速应用程序的方法 (我从来都不知道.)

when you want to work around the concurrency constraints builtin in browsers using different domain aliases

我的理解是:如果你想用多个域名别名来解决 浏览器内建对多线程并发的限制,你可以配置这个参数解决。 看到加粗部分后,我就猜测:浏览器分配给同一个域名的线程数有限,这样就降低了 应用访问的速度。

互相关联的配置

在翻译的时候,我发现很多配置会有关联,冲突或者合作。 感觉到了关联配置可能导致怪异问题. 这里简单整理下今天翻译到的。

冲突用 ✖ 隔开, 合作的用 ♥

* config.autoload_once_paths ♥ config.cache_classes  
  前者在后者为 false 的时候失效.  

* config.action_view.cache_template_loading ♥ config.cache_classes  
  前者的默认值是后者设置的任何值.  

* config.dependency_loading ♥ config.cache_classes  
  前者在后者为 true 的时候有效。  

* config.dependency_loading ✖ config.threadsafe!  
  使用后者会让前者变为 false.  

* config.file_watcher ♥ config.reload_classes_only_on_change  
  后者为 true 的时候才有效  

* config.preload_frameworks ♥ config.threadsafe!  
  激活后者的同时会激活前者。  

* config.reload_classes_only_on_change ✖ config.cache_classes  
 后者为 true 的时候,前者会被忽略,即无效.  



看着有点乱,有时间弄个关系图谱。:)


好吧...今天就干了这些。

oh.. BTW. It's funny.

♥ ☺ ♫✩★✔✖♞☢▲♛ϟ☀❥

在 controller 里面实现 local_request? 方法。

就是在 controller 里重写一下这个方法吧?

我怎么觉得楼主在翻译 Rails 2.x?Rails-2.3.5 里, ActionController::Rescue里这么定义的:

# True if the request came from localhost, 127.0.0.1. Override this
# method if you wish to redefine the meaning of a local request to
# include remote IP addresses or other criteria.
def local_request? #:doc:
  request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end



最终的效果就是,如果 config.consider_all_requests_localtrue,并且 local_request?返回 true,那么抛出异常时,就会是那个错误信息的页面。

      def rescue_action_without_handler(exception)
#................
        if consider_all_requests_local || local_request?
          rescue_action_locally(exception)
        else
          rescue_action_in_public(exception)
        end
#................
      end


BTW. 我以前用 Nginx 反向代理部署了一个 Rails 项目,虽然是 production 模式,但是有异常时,总会渲染那个错误信息页面。后来找到了原因:Nginx 没有把请求的 IP 传递给后边的 Rails 进程,Rails 看到的 IP 都是 127.0.0.1 的,所以渲染那个页面;解决办法是让 Nginx 把 Http 请求的 IP 和主机名传递过去。

Guide 里的意思是,要想看看某个请求的错误信息,就重写一下 #local_request? ,满足一定条件时,返回 true

但是,Rails-3 里,貌似没有用到#local_request?,而应该重写 #show_detailed_exceptions? (这个名字挺直观的)

config.asset_host 这个是因为浏览器的并发请求限制,比如 IE6 对一个域名最多同时加载 2 个资源,如果拆分成多个域名,就可以更快的加载页面元素

@zhangyuan 不会吧。活生生的 v3.2.2 的文档啊。上官方网站也是这么写的。

For finer-grained control, set this to false and implement local_request? in controllers to specify which requests should provide debugging information on errors.

不过最新的代码的确是你说的那个方法

# Override this method if you want to customize when detailed
# exceptions must be shown. This method is only called when
# consider_all_requests_local is false. By default, it returns
# false, but someone may set it to `request.local?` so local
# requests in production still shows the detailed exception pages.
def show_detailed_exceptions?
  false
end

#4 楼 @ichord 可能是文档没有更新吧⋯⋯【猜的】

最近也在翻译 guides,碰到一些 不太知道怎么翻译的单词不知如何处理 例如: profiling test profiler mock test metrics 还有一些东西自己没有测试实践过,感觉翻译出来的相当不好看。。

@tassandar 其实我觉得像 wiki 那样被大众在线编辑的会好很多。又或者像 copycopter 这样的。

#7 楼 @ichord 但是编辑和翻译毕竟不太一样阿。其实我觉得翻译比自己动手去写东西要容易的多了。

@tassandar 那要看翻译的质量...

#9 楼 @ichord 但是那样不就和这里的 wiki 一样了?

@tassandar 嗯... https://launchpad.net/ 协作翻译系统就很好。不过有点扯远了. 现在用 gihub 管理也很好了。

#11 楼 @ichord 对了,那要翻译的 configuring.textile 几天前英文版更新了。你看看是不是追着最新的翻译?

@tassandar 我昨天才开始翻译的。上官方文档看也是一样。估计官方文档的 bug.要不就是没更新。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号