问题标签 [actiondispatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5369 浏览

ruby-on-rails-4 - Rails 4.2 服务器;私人和公共IP不工作

我最近将我的 rails 4.1.8 更新为 4.2

我无法使用私有 IP192.168.1.x:3000以及我的public-ip address.

Rails应用程序正在使用lvh.me:30000.0.0.0:3000和. 但它看起来所有地址都指向我的服务器日志rails-issuelocalhost:3000127.0.0.1:3000127.0.0.1:3000

它在 4.1 中运行良好

我尝试在 中添加以下内容environments/development.rb,但没有任何改变。

我正在尝试将我的本地服务器指向公共 IP 地址。我已经将端口转发配置为在公共地址中访问。

0 投票
2 回答
244 浏览

ruby-on-rails - Rails 将通配符路由限制为某种格式

我的routes.rb文件中有一个通配符路由:

在控制器中,我在数据库中查找客户端并显示其自定义页面:

这很好用,但我的问题是任何未找到的资产也正在通过我的client#show处理程序进行路由。

这导致在数据库中为客户端进行毫无意义的查找,然后我收到 500 错误,因为 Rails 不知道如何为非 html 格式呈现我的错误页面。

我的问题是:如何防止非 HTML 格式进入我的通配符处理程序?

我尝试了以下方法无济于事:

格式约束

在路由周围放置一个范围以将其限制为 HTML 格式:

这确实可以防止资产被路由到我的处理程序,但不幸的是,如果它们明确以.html扩展名结尾,则只会将页面路由到处理程序。失败。

格式默认

接下来,我想我会尝试格式default。像这样:

不幸的是,仍然没有工作人员。没有变化。我的理解是,如果 Rails 无法从内容类型标头或文件扩展名中找出它,这只是设置默认格式。

我开始认为在路由级别可能没有办法做到这一点。

0 投票
2 回答
1910 浏览

ruby-on-rails - ActionDispatch::Routing::RouteSet#call Rails 4.1 真的很慢

我已经搜索了好几天,但找不到这个问题的任何相关答案。

在我托管在 Heroku 上的 Rails 4.1 应用程序中,当负载增加时,一些 PUT 请求变得非常慢。今天最慢的是53秒。所有这些都没有数据库(MongoDB)注册任何慢查询。通常这个请求需要 0.3ms 非常快。无论有效负载是什么,请求都很慢。

安装 New Relic 后,它对情况有了更多了解,但我仍然不知道在哪里解决这个问题。

控制器中的代码很快,但根据 New Relic,慢的是 ActionDispatch::Routing::RouteSet#call

这是New Relic报告的转储:

其他一些可能有帮助或可能与此有关的信息。我有路线的别名,但我不明白为什么这很重要。

任何关于可能发生的事情以及我可以做些什么来解决它的想法将不胜感激。

更新 所以这似乎与内存有关。当我们升级到 Performance Dynos 时,我们不再看到这些错误。但这似乎是 Heroku 严重错误配置的东西。

0 投票
2 回答
2713 浏览

ruby-on-rails - 如何从 Rails 日志中过滤嵌套参数

我看到我可以在此处从 Rails 日志中过滤键,但尚不完全清楚如何过滤嵌套在参数哈希中的键。

我的参数哈希看起来像这样:

params[:download][:data]base64 字符串在哪里。这是大量数据,我想将其从日志中删除。

这可能吗?

我正在使用 Rails 4.0.4

0 投票
5 回答
6298 浏览

ruby-on-rails - 在某些 RSpec rails 请求示例中测试 HTTP 状态代码,但在其他示例中测试引发异常

在使用 测试的 Rails 4.2.0 应用程序中rspec-rails,我提供了一个 JSON Web API,它带有一个带有强制属性的类 REST 资源mand_attr

BAD REQUEST当 POST 请求中缺少该属性时,我想测试此 API 是否使用 HTTP 代码 400 ( ) 回答。(参见第二个示例。)我的控制器尝试通过抛出一个 来触发这个 HTTP 代码ActionController::ParameterMissing,如下面的第一个 RSpec 示例所示。

其他RSpec 示例中,我希望引发的异常被示例拯救(如果它们是预期的)或命中测试运行器,因此它们会显示给开发人员(如果错误是意外的),因此我不想要去除

config/environments/test.rb.

我的计划是在请求规范中包含以下内容:

我找到了两种可行的解决方案和一种部分可行的解决方案,我将把它们作为答案发布。但我对它们中的任何一个都不是特别满意,所以如果你能想出更好的东西(或者只是不同的东西),我想看看你的方法!另外,如果请求规范是测试此规范的错误类型,我想知道。

我预见到这个问题

为什么您要测试 Rails 框架而不仅仅是您的 Rails 应用程序?Rails 框架有自己的测试!

所以让我先发制人地回答这个问题:我觉得我不是在这里测试框架本身,而是我是否正确使用了框架。我的控制器不是继承自ActionController::Base而是继承自ActionController::API,我不知道是否默认ActionController::API使用ActionDispatch::ExceptionWrapper,或者我是否首先必须告诉我的控制器以某种方式这样做。

0 投票
1 回答
715 浏览

ruby-on-rails - Rails 生产环境中的 ActionDispatch::Static

我正在寻找用于ActionDispatch::Static在公共目录以外的目录中提供静态文件。它在开发中完美运行,但我似乎无法在生产中获得相同的结果。

我有我的静态文件在/var/www/mysite.com-static. 在初始化程序中,我添加了以下内容:

的输出rake middleware如下:

为什么我在 /var/www/myapp.com-static 中请求的每个页面都会收到 404?

0 投票
1 回答
1012 浏览

ruby-on-rails - ActionDispatch::Routing::Mapper 的未定义方法“propfind”

我正在尝试git push在我的 Rails 应用程序上实现,它发送 PROPFIND 请求,rails 似乎没有验证。当我尝试:

git push http://localhost:3000/satellite/.git

它给了我:

在 2015-06-08 19:20:38 +0530 为 127.0.0.1 启动 PROPFIND "/satellite/.git/"

ActionController::RoutingError (没有路由匹配 [PROPFIND] "/satellite/.git")

但是git clone http://localhost:3000/satellite/.git工作得很好。(即回购存在那里。)

如果我尝试将 propfind 添加到我的 routes.rb 文件中,它会给我:

ActionDispatch::Routing::Mapper 的未定义方法“propfind”

我发现了这个:https ://rails.lighthouseapp.com/projects/8994/tickets/5895-allow-mounting-of-rack-apps-that-deal-with-http-extensions

我认为在那个补丁之后他们允许在 ActionDispatch 中使用 PROPFIND,并且在文档中他们提到 propfind 作为 RFC3253 常量。有什么办法可以启用 PROPFIND?

0 投票
1 回答
657 浏览

ruby-on-rails - 如何从 ActionDispatch::Cookie::CookieOverflow 中救援?

首先,我读过:

Rails应用程序中的Cookie溢出?

这不是我面临的问题。

我正在与:

我正在尝试处理搜索,当搜索太大时,我收到此错误:

我想在 ApplicationController 中挽救这个错误,但它似乎对我不起作用:

在哪里:

任何帮助都会受到好评。

0 投票
0 回答
55 浏览

ruby - 如何禁止使用 Ruby UploadedFile 上传可执行文件?

我正在使用ActionDispatch::Http::UploadedFile.new我的Grape项目来上传文件。

我没有使用任何像paperclip工作一样的 gem,我想验证文件类型并且不允许执行文件。

从纪录片看来,我可以用它#content_type来检查文件的内容。

是否有任何简单的方法来进行验证,我在哪里可以找到可执行扩展的列表?

0 投票
2 回答
1505 浏览

ruby-on-rails - 使用嵌套资源覆盖命名路由参数

我想覆盖:id参数,解释了如何。但不适用于嵌套资源。我的路线看起来像:

这会生成格式的 url: :user_user_id/:project_id。我宁愿把它作为:user_id/:project_id. 有人可以帮忙吗?