Rails - 通过浏览器获取500服务器错误,但通过脚本/控制台工作。是什么赋予了?

时间:2010-01-19 14:17:26

标签: ruby-on-rails hosting

好吧,我已经追了好几个小时了,我无法理解。我有一个Ruby on Rails应用程序,我已部署到我的托管服务提供商DreamHost。我创建了一个名为“stage”的新环境,并在/ config / environment文件夹中创建了一个stage.rb文件,并将以下行放入我的environment.rb

# Be sure to restart your server when you modify this file

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION

ENV["RAILS_ENV"] ||= "stage"

# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')

Rails::Initializer.run do |config|

我可以运行

RAILS_ENV=stage script/console

一切都运行良好。我可以运行rake db:migrate并生成我的数据库。然后我可以进入控制台并按照我的模型行事。我还可以在stage.log中看到ActiveRecord活动

问题是当我打开浏览器并导航到URL时,我得到了500错误

  

我们很抱歉,但出了点问题。

当我尝试通过浏览器访问该网站时,我没有看到任何写入stage.log的内容。

我的apache日志文件如下所示。

1.1.1.1 - - [19/Jan/2010:06:05:01 -0800] "GET /classes/calendar HTTP/1.1" 500 861 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10" 

我甚至尝试从控制台运行应用程序控制器,这也有效。我无法弄清楚为什么页面无法通过浏览器正常运行。

是否有我遗失的权限设置。我认为在DreamHost上FTP用户和服务器运行的用户是相同的所以我我有正确的权限,但我只是不确定。

任何帮助将不胜感激, 罗布

2 个答案:

答案 0 :(得分:1)

问题可能出在您将RAILS_ENV设置为“stage”的行中。您正在使用的|| =赋值仅在尚未定义RAILS_ENV时设置值。在这种情况下,即使在点击您的应用程序之前,RA很可能已经将RAILS_ENV设置为“生产”,因此|| =赋值无效。

要查看这是否真的是问题,请查看您的日志目录 - 您可能会找到一个production.log并且stage.log中没有条目(除了您运行的脚本/控制台产生的条目)您的应用程序正在(无意中)作为生产运行。

解决此问题的一种方法是将行更改为:

ENV["RAILS_ENV"] = "stage"

答案 1 :(得分:0)

通常这个问题可能是脚本或您的宝石环境的权限。我不熟悉在DH上部署rails应用程序,你使用的是Passenger还是fastcgi?

从shell中,运行gem env

检查您的gem环境
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.5
  - RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]
  - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /usr/lib/ruby/gems/1.8
     - /home/<username>/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.rubyforge.org/", "http://gems.github.com", "http://gemcutter.org"]
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/
     - http://gems.github.com
     - http://gemcutter.org

这些设置适用于控制台,但不适用于通过apache运行。为此,您需要编辑config / environments.rb并添加

ENV['GEM_PATH'] = '/home/<usrname>/.gem/ruby/1.8:/usr/lib/ruby/gems/1.8'

您希望确保您在此处设置的GEM_PATH与gem env命令的输出匹配。