Ruby on rails 如何让Rails 3在带乘客的服务器上以生产模式运行
您好,我正在运行带有Capistrano部署脚本的Passenger/mongo/Rails 3.2(没有activerecord或mysql) 我正在尝试让我的应用程序在linux服务器上以生产模式运行 在我的apache配置文件中,我有以下内容Ruby on rails 如何让Rails 3在带乘客的服务器上以生产模式运行,ruby-on-rails,ruby-on-rails-3,apache,capistrano,passenger,Ruby On Rails,Ruby On Rails 3,Apache,Capistrano,Passenger,您好,我正在运行带有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/publ
<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>
RAILS_ENV="production"
RAILS_ENV.freeze
set :rails_env, "production"
在我的Capistrano deploy.rb中,我有以下内容
<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>
RAILS_ENV="production"
RAILS_ENV.freeze
set :rails_env, "production"
编辑:但当我通过capistrano部署或执行sudo服务时,apache2会重新启动。它说apache会重新启动,但当我访问url时,服务器永远不会出现。对于带有
config.ru
文件的Rails 3.x应用程序,您应该在VirtualHost
配置中使用rackinv
参数:
RackEnv production
您确实不应该在
environment.rb的内部强制设置RAILS\u ENV
。这必然会导致各种问题。在我的生产环境(应用程序名conflux)中,我的标签中有RailsEnv production
<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>
RailsEnv生产
PassengerAppRoot/var/www/conflux/current
通融
#关闭与乘客不兼容的多视图。
选项-多视图
我同意不在environment.rb内设置RAILS_ENV。首先,RAILS_ENV是一个常量,我认为如果使用它(在RAILS 3之前),它是在进入环境之前设置的。因此,它可能已经被设置,并且作为一个常量,不会改变
我也不确定RAILS_ENV是否已在RAILS 3中使用。似乎是一个不寻常的问题。我已经部署了许多具有类似或相同堆栈的应用程序,没有发生意外
试试这个:
请从environment.rb文件中删除任何自定义代码(与此问题相关)
从部署文件中删除rails_env变量
确保在Apache虚拟主机配置中保留“RailsEnv生产”
将SSH插入服务器并手动重新启动Apache
我会在早上检查,但我相信mod_rails的重启任务是不好的,我想我已经在部署后手动重启了Apache。不知道为什么,我认为这与“current_path”只是一个符号链接或者“PassengerMinInstances”可能阻止新的乘客线程使用修改后的代码生成有关。所有推测。您是否尝试过预编译资产,一旦预编译,资产将放置在公用文件夹中,然后只有您才能在生产模式下成功运行它。试试这个rake-assets:precompile
如果它是jruby,那么jruby-S rake-assets:precompile
如果服务器处于生产模式,则需要在生产中将资产管道和资产服务器设置为“TRUE”。rb我假定这是目录的权限设置
<Directory /srv/www/**test.example.com/**current/public>
AllowOverride all
Options -MultiViews
</Directory>
不太熟悉Capistrano或apache,但我一直认为它们应该是相同的。删除了environment.rb内容,将RackNV产品放在apache配置中,运行cap部署,主页仍然输出“在开发模式下运行”刷新后,rails控制台
在什么地方启动?当我进入服务器上的app目录并运行“rails c”时,它在开发模式下启动。我通常在.bashrc
或/etc/profile.d/rails.sh
中为bash
设置export rails\u ENV=production
,在支持这种事情的地方。请注意,此环境设置不适用于Apache,这就是RackEnv
设置的目的。我认为正在使用POSIX环境变量RAILS_ENV,但ruby常量RAILS_ENV已过时。尝试过此设置,但也没有成功。也许通过capistrano重新启动应用程序会跳过对apache配置的更改?RAILS\u ENV
仍然存在,但在RAILS 3.x中,RAILS.ENV
是首选的方法。我直接进入控制台,键入RAILS\u ENV。我得到NameError:未初始化的常量RAILS\u ENV。我认为RAILS_ENV并没有在RAILS 3中被设置或读取,至少对我来说在RAILS 3.1中没有。这是实现它的方法。确保在进行更改后重新启动apache。好的,这是正确的。我发现执行cap部署不会重新获取apache配置文件更改,因此需要手动重新启动。现在的问题是,当我手动重新启动并在文件中包含RailsEnv产品时,它会说它会重新启动,但服务器再也不会显示该页面(获得类似此页面的错误消息-)。在生产模式下一定是启动问题,但我检查了mongo和apache日志,没有发现任何错误。我需要在我的cap部署文件中有一些关于预编译资产的内容吗?@HelloWorld是的,cap有用于资产预编译的内部构建任务,只需在cap文件中添加_u'load'deploy/assets',就完成了:)@HelloWorld还有,检查rails日志!乘客加速问题可能不会记录到apache或mongo日志中。log/production.log应包含繁殖失败的详细信息。我通常觉得这比访问乘客日志更容易。。。这也是一个选项;)+1资产预编译行工作,谢谢。但重启后仍然失败,我进入了app_base/current/logs和vi production.log,但没有看到任何错误。不确定这是否是您提到的日志文件。目前正在尝试在本地测试生产模式,以查看我的配置/环境文件是否良好。当我通过capistrano部署或执行sudo服务时,请重新启动apache2。它说apache会重新启动,但当我访问url时,服务器永远不会出现(如果我在apache配置中将其设置为production),它会在开发模式下正常启动。rake资产预编译已经通过capistrano部署脚本执行。我的production.rb文件中有config.assets.compile=false,但我认为这不应该阻止apache启动。您应该尝试一下,即将该参数更改为“true”。如果这不起作用,最好的办法是查看development.log文件,看看到底是什么问题!另外,请