自定义rails路由问题2.3.8和Mongrel

时间:2010-05-30 18:41:15

标签: controller action ruby-on-rails-3 mongrel

我有一个叫做'曝光'的控制器,我用脚本/生成脚手架调用自动创建。脚手架页面工作正常。我在曝光控制器中创建了一个名为“test”的自定义动作。当我尝试调用页面(http://127.0.0.1:3000/exposures/test/1)时,我得到一个空白的白色屏幕,源中没有文字。

我在开发环境中使用Rails 2.3.8和mongrel。 development.log中没有条目,用于打开mongrel的控制台出现以下错误:

  

您可能期望有一个Array实例。评估nil.split时发生错误>   D:/Rails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/cgi_process.rb:52:in dispatch_cgi' D:/Rails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/dispatcher.rb:101:in dispatch_cgi'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.8/lib/action_controller/dispatcher.rb:27:in dispatch' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel/rails.rb:76:in process'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel / rails.rb:74:in synchronize' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel/rails.rb:74:in process'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel.rb:159:in process_client' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel.rb:158:in each'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel.rb:158:in process_client' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel.rb:285:in run'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel.rb:285:in initialize' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel.rb:285:in new'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel.rb:285:in run' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel.rb:268:in initialize'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel.rb:268:in new' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel.rb:268:in run'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel / configurator.rb:282:in run' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/../lib/mongrel/configurator.rb:281:in each'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel / configurator.rb:281:in run' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/mongrel_rails:128:in run'   D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin /../ lib / mongrel / command.rb:212:in run' D:/Rails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32/bin/mongrel_rails:281 D:/Rails/ruby/bin/mongrel_rails:19:in load'   d:/轨道/红宝石/斌/ mongrel_rails:19

这是exposures_controller代码:

class ExposuresController < ApplicationController
  # GET /exposures
  # GET /exposures.xml
  def index
    @exposures = Exposure.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @exposures }
    end
  end

  #/exposure/graph/1
  def graph
   @exposure = Exposure.find(params[:id])
   project_name = @exposure.tender.project.name
   group_name = @exposure.tender.user.group.name
   tender_desc = @exposure.tender.description
   direction = "Cash Out"
   direction = "Cash In" if @exposure.supply
   currency_1_and_2 = "#{@exposure.currency_in} => #{@exposure.currency_out}"
   title = "#{project_name}:#{group_name}:#{tender_desc}/n"
   title += "#{direction}:#{currency_1_and_2}"
   factors = Array.new
   carrieds = Array.new
   days = Array.new
   @exposure.rates.each do |r|
    factors << r.factor
    carrieds << r.carried
    days << r.day.to_s    
   end
   max = (factors+carrieds).max
   min = (factors+carrieds).min

   g = Graph.new
   g.title(title, '{font-size: 12px;}')
   g.set_data(factors)
   g.line_hollow(2, 4, '0x80a033', 'Bounces', 10)
   g.set_x_labels(days)
   g.set_x_label_style( 10, '#CC3399', 2 );
   g.set_y_min(min*0.9)
   g.set_y_max(max*1.1) 
   g.set_y_label_steps(5)
   render :text => g.render
  end

  def test
   render :text => "this works"
  end



  # GET /exposures/1
  # GET /exposures/1.xml
  def show
    @exposure = Exposure.find(params[:id])
    @graph = open_flash_chart_object(700,250, "/exposures/graph/#{@exposure.id}")  
    #@graph = "/exposures/graph/#{@exposure.id}"


    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @exposure }
    end
  end

  # GET /exposures/new
  # GET /exposures/new.xml
  def new
    @exposure = Exposure.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @exposure }
    end
  end

  # GET /exposures/1/edit
  def edit
    @exposure = Exposure.find(params[:id])
  end

  # POST /exposures
  # POST /exposures.xml
  def create
    @exposure = Exposure.new(params[:exposure])

    respond_to do |format|
      if @exposure.save
        flash[:notice] = 'Exposure was successfully created.'
        format.html { redirect_to(@exposure) }
        format.xml  { render :xml => @exposure, :status => :created, :location => exposure }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @exposure.errors, :status => unprocessable_entity}
      end
    end
  end

  # PUT /exposures/1
  # PUT /exposures/1.xml
  def update
    @exposure = Exposure.find(params[:id])

    respond_to do |format|
      if @exposure.update_attributes(params[:exposure])
        flash[:notice] = 'Exposure was successfully updated.'
        format.html { redirect_to(@exposure) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @exposure.errors, :status => unprocessable_entity}
      end
    end
  end

  # DELETE /exposures/1
  # DELETE /exposures/1.xml
  def destroy
    @exposure = Exposure.find(params[:id])
    @exposure.destroy

    respond_to do |format|
      format.html { redirect_to(exposures_url) }
      format.xml  { head :ok }
    end
  end
end

聪明的读者会注意到“图表”操作。这是我真正想要的工作,但如果我甚至无法让测试动作起作用,那么我相信我没有机会。

有什么想法吗?我没有改变就重启了mongrel几次。

以下是Rake路由的输出(但我不认为这是问题。错误将以HTML错误响应的形式出现。)

D:\Rails\rails_apps\fx>rake routes
(in D:/Rails/rails_apps/fx)
DEPRECATION WARNING: Rake tasks in vendor/plugins/open_flash_chart/tasks are deprecated. Use lib/tasks instead. (called from D:/
by/gems/1.8/gems/rails-2.3.8/lib/tasks/rails.rb:10)
        rates GET    /rates(.:format)                   {:controller=>"rates", :action=>"index"}
              POST   /rates(.:format)                   {:controller=>"rates", :action=>"create"}
     new_rate GET    /rates/new(.:format)               {:controller=>"rates", :action=>"new"}
    edit_rate GET    /rates/:id/edit(.:format)          {:controller=>"rates", :action=>"edit"}
         rate GET    /rates/:id(.:format)               {:controller=>"rates", :action=>"show"}
              PUT    /rates/:id(.:format)               {:controller=>"rates", :action=>"update"}
              DELETE /rates/:id(.:format)               {:controller=>"rates", :action=>"destroy"}
      tenders GET    /tenders(.:format)                 {:controller=>"tenders", :action=>"index"}
              POST   /tenders(.:format)                 {:controller=>"tenders", :action=>"create"}
   new_tender GET    /tenders/new(.:format)             {:controller=>"tenders", :action=>"new"}
  edit_tender GET    /tenders/:id/edit(.:format)        {:controller=>"tenders", :action=>"edit"}
       tender GET    /tenders/:id(.:format)             {:controller=>"tenders", :action=>"show"}
              PUT    /tenders/:id(.:format)             {:controller=>"tenders", :action=>"update"}
              DELETE /tenders/:id(.:format)             {:controller=>"tenders", :action=>"destroy"}
    exposures GET    /exposures(.:format)               {:controller=>"exposures", :action=>"index"}
              POST   /exposures(.:format)               {:controller=>"exposures", :action=>"create"}
 new_exposure GET    /exposures/new(.:format)           {:controller=>"exposures", :action=>"new"}
edit_exposure GET    /exposures/:id/edit(.:format)      {:controller=>"exposures", :action=>"edit"}
     exposure GET    /exposures/:id(.:format)           {:controller=>"exposures", :action=>"show"}
              PUT    /exposures/:id(.:format)           {:controller=>"exposures", :action=>"update"}
              DELETE /exposures/:id(.:format)           {:controller=>"exposures", :action=>"destroy"}
   currencies GET    /currencies(.:format)              {:controller=>"currencies", :action=>"index"}
              POST   /currencies(.:format)              {:controller=>"currencies", :action=>"create"}
 new_currency GET    /currencies/new(.:format)          {:controller=>"currencies", :action=>"new"}
edit_currency GET    /currencies/:id/edit(.:format)     {:controller=>"currencies", :action=>"edit"}
     currency GET    /currencies/:id(.:format)          {:controller=>"currencies", :action=>"show"}
              PUT    /currencies/:id(.:format)          {:controller=>"currencies", :action=>"update"}
              DELETE /currencies/:id(.:format)          {:controller=>"currencies", :action=>"destroy"}
     projects GET    /projects(.:format)                {:controller=>"projects", :action=>"index"}
              POST   /projects(.:format)                {:controller=>"projects", :action=>"create"}
  new_project GET    /projects/new(.:format)            {:controller=>"projects", :action=>"new"}
 edit_project GET    /projects/:id/edit(.:format)       {:controller=>"projects", :action=>"edit"}
      project GET    /projects/:id(.:format)            {:controller=>"projects", :action=>"show"}
              PUT    /projects/:id(.:format)            {:controller=>"projects", :action=>"update"}
              DELETE /projects/:id(.:format)            {:controller=>"projects", :action=>"destroy"}
       groups GET    /groups(.:format)                  {:controller=>"groups", :action=>"index"}
              POST   /groups(.:format)                  {:controller=>"groups", :action=>"create"}
    new_group GET    /groups/new(.:format)              {:controller=>"groups", :action=>"new"}
   edit_group GET    /groups/:id/edit(.:format)         {:controller=>"groups", :action=>"edit"}
        group GET    /groups/:id(.:format)              {:controller=>"groups", :action=>"show"}
              PUT    /groups/:id(.:format)              {:controller=>"groups", :action=>"update"}
              DELETE /groups/:id(.:format)              {:controller=>"groups", :action=>"destroy"}
        users GET    /users(.:format)                   {:controller=>"users", :action=>"index"}
              POST   /users(.:format)                   {:controller=>"users", :action=>"create"}
     new_user GET    /users/new(.:format)               {:controller=>"users", :action=>"new"}
    edit_user GET    /users/:id/edit(.:format)          {:controller=>"users", :action=>"edit"}
         user GET    /users/:id(.:format)               {:controller=>"users", :action=>"show"}
              PUT    /users/:id(.:format)               {:controller=>"users", :action=>"update"}
              DELETE /users/:id(.:format)               {:controller=>"users", :action=>"destroy"}
                     /:controller/:action/:id
                     /:controller/:action/:id(.:format)

提前感谢您的帮助

-Jon

1 个答案:

答案 0 :(得分:0)

问题似乎已经解决了。 Rack中有一个小错误:

http://github.com/rack/rack/commit/f6f3c60938ea3b08f3292a2480e6753c293584e5

我按照指示更改了系统上的文件,因为我不确定如何从gitHub中正确地修改它。

ruby gems update rack (?)

有人知道这一个吗?