Rails(具体来说,Rails 6)定义了 ActiveSupport::Logger,根据文档和源代码,它似乎是Logger(Ruby 标准库之一)的包装器。
\n然而,在截至 2020 年 10 月的 Rails 6.0当前官方 Rails 参考中,配置文件中使用了标准 Logger。(也许它曾经是 ActiveSupport::Logger?)
\n现在,我想在log/development.log配置文件中指定与默认(在开发环境中)不同的日志文件文件名(例如,config/environments/development.rb)。做
config.logger = Logger.new(\'log/my_log_file.log\')\nRun Code Online (Sandbox Code Playgroud)\n够了吗?或者,使用 ActiveSupport::Logger 更好吗?如果是这样,有什么区别?
\n请注意,默认情况下,config/environments/development.rb没有定义有关日志文件名称的要遵循或修改的设置。不过,log/development.log它是在开发环境中自动创建的,因此必须在某个不起眼的地方定义它。
[编辑]这个答案暗示了我的表达方式。我确认它似乎适用于我的环境。但没有推理为什么so\xe2\x80\xa6 ActiveSupport::Logger是错误的?
\n有没有办法将最后一个匹配(实际上Regexp.last_match)传递给 Ruby 中的块(迭代器)?
Srring#sub这是一个示例方法,作为演示该问题的一种包装器。它接受标准参数和块:
def newsub(str, *rest, &bloc)\n  str.sub(*rest, &bloc)\nend\nRun Code Online (Sandbox Code Playgroud)\n\n它适用于标准的仅参数情况,并且可以占用一个块;然而,像 $1、$2 等位置特殊变量在块内不可用。这里有些例子:
\n\nnewsub("abcd", /ab(c)/, \'\\1\')        # => "cd"\nnewsub("abcd", /ab(c)/){|m| $1}      # => "d"  ($1 == nil)\nnewsub("abcd", /ab(c)/){$1.upcase}   # => NoMethodError\nRun Code Online (Sandbox Code Playgroud)\n\n该块的工作方式与String#sub(/..(.)/){$1}我认为的工作方式不同的原因与范围有关;特殊变量 $1、$2 等是局部变量(也是Regexp.last_match)。
有什么办法可以解决这个问题吗?我想让该方法像 $1、$2 等在提供的块中可用的意义上newsub一样工作。String#sub
编辑:根据过去的一些答案,可能没有办法实现这个\xe2\x80\xa6
\n最近, Ruby-on-Rails 的输出button_to开始在W3C 验证中失败,返回的消息为:
\n\n具有隐藏值的 type 属性的输入元素不得具有值为 on 或 off 的 autocomplete 属性。
\n
所以我想摆脱这个错误。
\nbutton_toRails-7.0.4中View(ERB)中对应的语句是
<%= button_to "Add Entry", new_article_path, form_class: "inline_form button_to",\n  method: :get, params: { a_token: "abc" } %>\nRun Code Online (Sandbox Code Playgroud)\n它会生成一个 HTML(简化的!):
\n<!DOCTYPE html>\n<html lang="en"> <head> <meta charset="utf-8"> <title>My Title</title> </head>\n<body>\n <form class="inline_form button_to" method="get" action="/articles/new?locale=en">\n  <input type="submit" value="Add Entry" />\n  <input type="hidden" name="a_token" value="abc" autocomplete="off" />\n </form>\n</body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n如果我将其粘贴到W3C 验证器表单中,则会失败并显示上述消息。
\n显然,W3C 验证器不喜欢带有 …
我想测试 Rails 5 中激活了基本身份验证的控制器。当前官方说明(截至 2018-10-14)中解释的方式由于某种原因不起作用。问答“在 Rails 2.2+ 中测试 HTTP 基本身份验证”对于 Rails 5 来说似乎太旧了(至少对于默认情况)。
这是重现该案例的简化示例。
我从全新安装的 Rails(最新稳定版 5.2.1)通过脚手架制作了一个文章模型和相关资源:
bin/rails g scaffold Article title:string content:text
Run Code Online (Sandbox Code Playgroud)
并按照官方指南为控制器添加了基本身份验证功能;那么 ArticlesController 就是这样的,它当然有效:
# /app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
  http_basic_authenticate_with name: "user1", password: "pass"
  before_action :set_article, only: [:show, :edit, :update, :destroy]
  def index
    @articles = Article.all
  end
end
Run Code Online (Sandbox Code Playgroud)
在官方指令解释测试基本身份验证的方式; 你request.headers['Authorization']在setup控制器的测试文件中添加
块,我做了:
# /test/controllers/articles_controller_test.rb
require 'test_helper'
class ArticlesControllerTest < ActionDispatch::IntegrationTest
  setup do
    request.headers['Authorization'] = …Run Code Online (Sandbox Code Playgroud) ruby testng ruby-on-rails basic-authentication ruby-on-rails-5