【问题标题】:Rails 3.2.3 , Mongrel on WIndows Server 2003 R2 SP2, send_fileRails 3.2.3,Windows Server 2003 R2 SP2 上的 Mongrel,send_file
【发布时间】:2012-05-23 18:02:30
【问题描述】:

我在 Windows 2003 R2 SP2 服务器上部署了一个 Rails 3.2.3 应用程序(ruby 1.9.3p125)(不要问)。这是我的 Gemfile:

gem 'mysql2'
gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'
gem 'pdf-toolkit', "~> 1.0.0.rc1"
gem 'mongrel', '>= 1.2.0.pre2'
gem 'dispatcher'

我运行 Apache 2.2,并有两个 mongrel 作为 Windows 服务运行。 Apache 启动正常,没有报告错误。应用程序正在运行。它简单地做一些pdftk表格填写并发送一个pdf文件,即:

send_file(....)

在开发中,我得到了正确的 pdf,在 Windows 上的生产中,我得到了一个空的 pdf,这在我的 error.log 中:

2012-05-23 10:08:42 -0700: Error calling Dispatcher.dispatch #<NameError: uninitialized constant   ActionController::CgiRequest>
c:/ruby193/lib/ruby/gems/1.9.1/gems/mongrel-1.2.0.pre2-x86-mingw32/lib/mongrel/rails.rb:76:in `block in process'
<internal:prelude>:10:in `synchronize'
c:/ruby193/lib/ruby/gems/1.9.1/gems/mongrel-1.2.0.pre2-x86-mingw32/lib/mongrel/rails.rb:74:in `process'
c:/ruby193/lib/ruby/gems/1.9.1/gems/mongrel-1.2.0.pre2-x86-mingw32/lib/mongrel.rb:165:in `block in process_client'
c:/ruby193/lib/ruby/gems/1.9.1/gems/mongrel-1.2.0.pre2-x86-mingw32/lib/mongrel.rb:164:in `each'
c:/ruby193/lib/ruby/gems/1.9.1/gems/mongrel-1.2.0.pre2-x86-mingw32/lib/mongrel.rb:164:in `process_client'
c:/ruby193/lib/ruby/gems/1.9.1/gems/mongrel-1.2.0.pre2-x86-mingw32/lib/mongrel.rb:291:in `block (2 levels) in run'

我在 Rails 2.3.8 和 Ruby 1.8.7 上运行了这个,Apache 配置没有改变,因为它运行正确,所以我认为它与 Apache 配置无关,我确定它是相关的由于 Rails 3,我必须添加新的杂种。

更新:

我放弃了,用thin试了一下,效果很好。

看到大多数关于在 Windows 上安装 Thin 的帖子都来自 3.0.x 时间范围。从 3.2.3 和 Ruby 1.9.3 开始,我会稍微复习一下。

你还是要分两遍安装thin

gem install eventmachine --pre
gem install thin

您必须安装 ruby​​ 安装程序 DevKit

测试后,我重新做了我的 Apache 配置以使用瘦:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName pdftk.neeis.com
  DocumentRoot E:/Apache/pdftk/public/
  RewriteEngine On
  <Proxy balancer://thinservers>
    BalancerMember http://127.0.0.1:3005
    BalancerMember http://127.0.0.1:3006
  </Proxy>
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*) balancer://thinservers%{REQUEST_URI} [P,QSA,L]
  ProxyPass / balancer://thinservers/
  ProxyPassReverse / balancer://thinservers/
  ProxyPreserveHost On
  ProxyPass /images !
  ProxyPass /stylesheets !
  ProxyPass /javascripts !      
  <Proxy * >
    Order Deny,Allow
    Allow from all
  </Proxy>
  ErrorLog E:/Apache/Logs/error.log
  CustomLog E:/Apache/Logs/access.log combined
  LogLevel debug
</VirtualHost>

接下来就是将瘦身变成windows服务的繁琐任务,必须安装windows 2003 Resource Kit,将svrany.exe复制到System32,使用sc命令创建服务,然后做一些regedt32hackery。但是,它有效!

【问题讨论】:

  • 阅读 stackoverflow.com/a/10636946/643500 看看是否有帮助
  • 已经看到了,不同之处在于我的应用程序实际上正在运行,而我只有在尝试 send_file 时才会收到错误消息。我将在那个帖子上再摸摸头,看看我能从错误消息相同的事实中得出什么结论。
  • 在瘦服务器上试试,应该是基本的改动来测试一下
  • 完成!实际上在大约 2 小时前得出了这个结论,我刚看了你的评论,我们中的一个人是心灵感应的!
  • @D3mon-1stVFW thin 是答案,我编辑了问题,还阅读了 cmets(忘了给你发信号)。发布瘦作为答案,我会选择它。

标签: ruby-on-rails-3 mongrel


【解决方案1】:

编辑:

有些 gem 还不支持 Rails 3,试试 Thin。

据我所知,mongrel_cluster 还不支持 Rails 3。 最快的解决方案是切换到 Thin,它支持多个 Rails 实例,它的配置文件与 Mongrel 的非常相似 一个。

信用:https://stackoverflow.com/a/5660824/643500

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多