ruby-on-rails - 为什么单击已部署代码上的特定链接时会出现 500 错误?
问题描述
当我在远程服务器上正在运行的应用程序上点击特定端点时,我得到 500 Internal Error。然而,代码在我的本地系统/服务器上运行良好。
代码:
order_controller.rb
module Admin
module Statistic
class OrdersController < BaseController
def show
@orders_grid = ::Statistic::OrdersGrid.new(params[:statistic_orders_grid])
@assets = @orders_grid.assets
@paginated_assets = @assets.page(params[:page]).per(20)
fee_sums_per_currency = {}
@assets.each do |order|
fee_currency = order.get_order_fee_currency
unless fee_sums_per_currency.key?(fee_currency)
fee_sums_per_currency[fee_currency] = 0
end
fee_sums_per_currency[fee_currency] += order.fee
end
fee_summary = []
fee_sums_per_currency.each do |currency, fee_sum|
fee_summary << "#{ currency } #{ fee_sum }"
end
@summary = {
:count => @assets.length,
:fee_summary => fee_summary.join(", ")
}
@order_reset_button = true
end
end
end
end
意见/管理/统计/订单/show.html.slim
.row
= render "admin/statistic/shared/filter_panel", form_target: @orders_grid, url: admin_statistic_orders_path
.row
= render "admin/statistic/shared/summary_panel", groups: @assets
.row
.panel.panel-primary
.panel-heading
span = t('admin_header.orders')
.panel-body
= datagrid_table(@orders_grid, @paginated_assets)
共享文件
管理/统计/共享/filter_panel
.panel.panel-primary
.panel-heading
h4.panel-title = t('admin.statistic.filter')
.panel-body
= form_for form_target, url: url, html: {method: :get, class: 'form-horizontal'} do |f|
.row
.col.col-xs-3
= f.datagrid_label :currency
= f.datagrid_filter :currency, class: "form-control"
.col.col-xs-3
= f.datagrid_label :state
= f.datagrid_filter :state, class: "form-control"
.col.col-xs-3
= f.datagrid_label :type
= f.datagrid_filter :type, class: "form-control"
.col.col-xs-6
= f.datagrid_label :created_at
.form-inline
= f.datagrid_filter :created_at, class: "form-control"
.col.col-xs-2
br.heighten-br
= f.submit t('datagrid.form.submit'), class: "btn btn-primary", style: "width: 100%"
.col.col-xs-2
br.heighten-br
= link_to t('datagrid.form.clear'), {:controller => 'admin/statistic/orders', :action => 'show'}, class: 'btn btn-primary', style: "width: 100%"
管理/统计/共享/summary_panel
.panel.panel-default
.panel-heading
h4.panel-title.row
a data-parent="#filter-accordion" data-toggle="collapse" href="#summary"
span.col-xs-8.text-muted = t('admin.statistic.summary')
span.col-xs-4.text-right.text-muted = t('admin.statistic.click-to-expand')
#summary.panel-collapse.collapse
.panel-body
.datagrid-groups
- if groups
- groups.each do |key, val|
.datagrid.group.row
span.col-xs-2.title = t("admin.statistic.#{controller_name}.#{controller.action_name}.#{key}")
span.col-xs-10.value = val
导航栏
基于cancancan
- if can? :menu, Trade
li.dropdown class = check_active('withdraws')
= link_to 'javascript:;', class: 'dropdown-toggle', 'data-toggle' => 'dropdown' do
span = t('admin_header.trades')
span.caret
ul.dropdown-menu
- if can? :manage, Order
li class = check_active('orders')
= link_to t(".menus.items.operating.orders"), admin_statistic_orders_path
能力.rb
module Admin
class Ability
include CanCan::Ability
def initialize(user)
return unless user.admin?
can :read, Order
can :read, Trade
can :read, Proof
can :update, Proof
can :manage, Document
can :manage, Member
can :manage, Ticket
can :manage, IdDocument
can :manage, TwoFactor
can :manage, Coupon
can :manage, Order
can :manage, Trade
can :manage, Revenue
can :menu, Deposit
can :menu, Trade
end
end
end
配置/路由/admin.rb
namespace :admin do
namespace :statistic do
resource :orders, :only => :show
resource :trades, :only => :show
end
end
我已经检查过并且不知道在开发服务器上而不是在远程服务器上工作时缺少什么。
解决方案
所以我发现问题出在ability.rb。Order
没有在ability.rb
我的引用中定义为:menu
.
所以我不得不在ability.rb中定义它
module Admin
class Ability
include CanCan::Ability
def initialize(user)
return unless user.admin?
can :read, Order
can :read, Trade
can :read, Proof
can :update, Proof
can :manage, Document
can :manage, Member
can :manage, Ticket
can :manage, IdDocument
can :manage, TwoFactor
can :manage, Coupon
can :manage, Order
can :manage, Trade
can :manage, Revenue
can :menu, Deposit
can :menu, Trade
can :menu, Order # So I added this for `Order` to be references as `:menu` by admin.
end
end
end
然后在我由 Cancancan 驱动的导航栏中,我在if
语句中添加了 Order
- if can? :menu, Trade || Order # So I added this as well.
li.dropdown class = check_active('withdraws')
= link_to 'javascript:;', class: 'dropdown-toggle', 'data-toggle' => 'dropdown' do
span = t('admin_header.trades')
span.caret
ul.dropdown-menu
- if can? :manage, Order
li class = check_active('orders')
= link_to t(".menus.items.operating.orders"), admin_statistic_orders_path
推荐阅读
- pdf - Autodesk PDF Extension - 防止查询字符串覆盖页面
- sql - SQL Teradata 时的嵌套案例
- java - org.eclipse.jdt.core.dom.SimpleName.setIdentifier 引起:IllegalArgumentException Jibx?
- reactjs - 使用 react-to-pdf 时,获取元素未附加到文档错误
- function - 列出谷歌表格中按 COUNTIF 函数过滤的项目
- python - 在使用 tensorflow2 的多个 GPU 下,批量大小不可分割
- react-native - React native:带有动态 initialRouteName 实现的底部导航
- spring - com.netflix.client.ClientException:负载平衡器没有可用于客户端的服务器:邮件服务
- excel - 将数据导入 Power Query 并筛选一组记录是否具有至少一个条件值
- jwt - 使用表单身份验证生成 jwt