1

嗨,我正在使用 Capistrano 部署脚本运行 Passenger/mongo/Rails 3.2(没有 activerecord 或 mysql)。

我正在尝试让我的应用程序在我的 linux 服务器上以生产模式运行。

在我的 apache 配置文件中,我有以下...

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.example.com
 DocumentRoot /srv/www/example.com/current/public
 ErrorLog /srv/www/example.com/current/log/error.log
 CustomLog /srv/www/example.com/current/log/access.log combined
 PassengerDefaultUser www-data
  <Directory /srv/www/test.example.com/current/public>
     AllowOverride all
     Options -MultiViews
  </Directory>
 RailsEnv production
</VirtualHost>

编辑:在我的 environment.rb 文件中,我不再有以下内容......

RAILS_ENV="production"
RAILS_ENV.freeze

在我的 Capistrano deploy.rb 我有以下...

set :rails_env, "production"

编辑:但是当我通过 capistrano 部署或执行 sudo service apache2 restart 时。它说apache重新启动但是当我访问url时服务器永远不会出现。

4

5 回答 5

1

似乎是一个不寻常的问题。我已经部署了许多具有相似或相同堆栈的应用程序,没有发生任何事故。

尝试这个:

  1. 请从您的 environment.rb 文件中删除任何自定义代码(与此问题相关)。
  2. 从部署文件中删除 rails_env 变量
  3. 确保在 Apache 虚拟主机配置中保留“RailsEnv 生产”
  4. SSH 进入服务器并手动重启 Apache

我会在早上检查,但我认为 mod_rails 的重启任务不好,我想我已经在部署后手动重启了 Apache。不知道为什么,认为这与“current_path”只是一个符号链接的事实有关,或者“PassengerMinInstances”可能会阻止新的乘客线程使用修改后的代码产生。一切猜测。

于 2012-11-20T21:15:50.483 回答
1

对于带有config.ru文件的 Rails 3.x 应用程序,您应该RackEnv在配置中使用该参数VirtualHost

RackEnv production

你真的不应该RAILS_ENVenvironment.rb. 这势必会引发各种问题。

于 2012-11-01T18:48:31.990 回答
0

在我的生产环境(应用程序名称 conflux)上,标签内有 RailsEnv 生产。

<Directory /var/www/conflux/current/public>
  RailsEnv production
  PassengerAppRoot /var/www/conflux/current
  Allow from all

  #Turn off MultiViews, which is incompatable with Passenger.
  Options -MultiViews
</Directory>

我同意不在 environment.rb 中设置 RAILS_ENV。一方面,RAILS_ENV 是一个常量,我认为如果使用它(在 Rails 3 之前),它会在进入环境之前设置。所以,它可能已经被设置,并且作为一个常数,不会改变。

我也不确定在 Rails 3 中是否再使用 RAILS_ENV。

于 2012-11-01T18:55:32.760 回答
0

您是否尝试过预编译资产,一旦预编译,资产将放置在公用文件夹中,然后只有您才能在生产模式下成功运行它。rake assets:precompile如果它是 jruby 那么试试这个jruby -S rake assets:precompile

如果服务器处于生产模式,资产管道和资产服务器需要在 production.rb 中设置为“TRUE”

于 2012-11-21T11:02:25.370 回答
0

我假设这是您目录的权限设置

<Directory /srv/www/**test.example.com/**current/public>
     AllowOverride all
     Options -MultiViews
</Directory>

在这种情况下,这是否必须与您的文档根设置相同

DocumentRoot /srv/www/**example.com**/current/public

不太熟悉 Capistrano 或 apache,但我一直认为这些需要相同。

于 2012-11-27T17:56:41.190 回答