我正在将一个相当大的应用程序从Rails 3.0升级到3.2,并试图摆脱所有弃用警告.我的问题不是要改变什么来解决特定的警告,而是如何让Rails像异常那样对待它们,这样它就会在开发模式下转储堆栈跟踪,所以我将拥有完整的堆栈跟踪来查看违规代码的位置来自(哪里.这样我就可以使用我的测试套件找到它们,并验证它们都已清理干净.如果有一种方法可以让rspec在测试时失败,如果它记录了一个弃用警告,那也可以.
(如果有人想知道,我没有一直升级到rails 4.0的原因是该应用依赖于AFAIK还没有为rails 4做好充分准备的一些宝石,尤其是activerecord-oracle_enhanced-adapter.)
我有一个用户模型和角色模型,通过以下方式连接到ActiveRecord:
has_many roles, through: :role_accounts
Run Code Online (Sandbox Code Playgroud)
我希望有一个"编辑用户"屏幕,其中包含一个复选框列表,每个角色一个.使用Reform gem(v2.1.0),这是表单对象的一个片段:
class UserForm < Reform::Form
property :name
collection :roles do
property :id
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,当提交编辑表单,并检查2个角色时,params哈希看起来像:{"user=>{"name"=>"Joe","roles"=>["2","5",""]}}我收到此错误:
[Reform] Your :populator did not return a Reform::Form instance for `roles`.
Run Code Online (Sandbox Code Playgroud)
如何为has_many设置populator?
此外,我认为我首先需要删除所有用户的角色,然后添加所选的角色,这样他们最终只能使用当前的一组角色.我怎么能用改革宝石做到这一点?
我的应用程序记录登录的每个用户的IP地址,但我注意到它记录了我们的负载均衡器的IP地址而不是实际的客户端IP.研究这个问题,我认为这是因为我们的负载均衡器使用可公开路由的IP地址,并且Rails忽略了X-Forwarded-For报头,假设它已被欺骗.解决方案似乎是将我们的负载均衡器使用的ip范围"白名单".
对于rails 4.1.x,我的问题是,我该怎么做呢?这就是我现在所拥有的config/environments/production.rb:
config.action_dispatch.custom_proxies = %r{
^100\.30 | # production environment load balancers
^200\.40 | # dev environment load balancers
}x
Run Code Online (Sandbox Code Playgroud)
我尝试将其格式化为remote_ip.rb中的TRUSTED_PROXIES,但它可能应该是字符串或数组,还是格式不同的正则表达式?任何有关细节的帮助都非常感谢.如果您可以建议在将来版本的rails中捕获此配置的集成测试,则可以获得奖励.:-)
UPDATE
我已经尝试了多种方法来更新它,并且使用了更多的成功config.action_dispatch.trusted_proxies.这样可以防止我的负载均衡器被记录,但会将所有IP地址记录为"127.0.0.1",无论它们是内部还是外部.在logs/unicorn.log中,ip地址以[外部地址,10.*地址,负载均衡器地址]的形式出现,所以我知道问题出在机架或rails层,而不是早期的apache或nginx.我还尝试用不包含10.*范围的列表替换TRUSTED_PROXIES常量(因为内部用户具有该范围),但没有明显的效果.
此时,对于任何具有来自非公共IP地址的真实用户的应用程序,或者具有带有外部IP地址的负载均衡器的网络环境中托管的任何应用程序,Rails 4.1.x似乎都会被破坏.
我正在使用 jQuery-Migrate 插件版本 3.0.0 从 jQuery 1.11.2 升级到 jQuery 3.1.1。
在每次加载页面时,我都会收到此警告:
JQMIGRATE: jQuery.expr[":"] is now jQuery.expr.pseudos
Run Code Online (Sandbox Code Playgroud)
问题是我在我的代码或第三方库中找不到有问题的代码或其任何变体。我确实找到了这个例子,但我不认为它是一样的?
$.fn.visible = function() {
return this.css('visibility', 'visible');
};
$.fn.invisible = function() {
return this.css('visibility', 'hidden');
};
Run Code Online (Sandbox Code Playgroud)
更新1:这是网页中加载的JS代码:
<!DOCTYPE html>
<html>
<head>
<title>UpgradeJquery</title>
<script src="/assets/jquery/jquery.min.js?body=1"></script>
<script src="/assets/jquery-migrate/jquery-migrate.js?body=1"></script>
<script src="/assets/jquery-ui/jquery-ui.min.js?body=1"></script>
<script src="/assets/application.js?body=1"></script>
</head>
<body>
<h1>Home#index</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的 Bower.json 文件中列出版本的片段:
"dependencies": {
"jquery": "^3.1.1",
"jquery-ui": "^1.12.1",
"jquery-migrate": "^3.0.0"
}
Run Code Online (Sandbox Code Playgroud)
此时我怀疑jQuery-UI?
我正在尝试通过我的init文件中的melpa添加包.它工作,但今天它停止了.为了调试,我开始使用"emacs -q"并在我的暂存缓冲区中键入以下内容:
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
(package-initialize)
Run Code Online (Sandbox Code Playgroud)
前两行似乎有效.第三行给出了错误和堆栈跟踪:
(wrong-type-argument arrayp nil)
package--add-to-archive-contents(nil "melpa")
package-read-archive-contents()
Run Code Online (Sandbox Code Playgroud)
我的设置错误了吗?我有错误的网址吗?我正在使用GNU Emacs 24.5.1.
我有一个表,其中包含一个名为"sequence"的整数类型列,它不允许空值.如果我尝试正常定义工厂,FactoryGirl认为我正在尝试设置序列而不是定义列名.
factory :my_table do
sequence 1
end
# NoMethodError: undefined method `to_sym' for 1:Fixnum
Run Code Online (Sandbox Code Playgroud)
如何设置它以便FactoryGirl将其识别为普通列,而不是FactoryGirl序列?如果我想使用实际序列用唯一递增整数值填充列,该怎么办?我可以看到一个名为"trait"或"association"的列可能存在同样的问题.顺便说一下,我正在使用factory_girl 3.3.0和rails 3.2.8.