Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何让Rails 3在带乘客的服务器上以生产模式运行_Ruby On Rails_Ruby On Rails 3_Apache_Capistrano_Passenger - Fatal编程技术网

Ruby on rails 如何让Rails 3在带乘客的服务器上以生产模式运行

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

您好,我正在运行带有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>
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文件,看看到底是什么问题!另外,请