【问题标题】:Ubuntu 14.04 + rbenv + passenger showing public directoryUbuntu 14.04 + rbenv + 乘客显示公共目录
【发布时间】:2015-08-27 13:09:11
【问题描述】:

我想与Passenger 5 一起部署新旧Rails 应用程序(有些需要Ruby 1.8.7,有些需要1.9.2,有些需要Ruby 2.2+),但我无法安装工作。

我从一个需要 Ruby 1.8.7 和 Rails 2.1.0 的旧网站开始。当我设置虚拟主机并尝试连接到应用程序时,我只获得了公共目录的索引。

我有一个部署用户,我已经为其设置了 rbenv,一切都通过 Webrick 运行。我已经安装了passenger gem,然后运行了passenger-install-apache2-module,Apache 说模块已经加载了。

这是我的应用程序虚拟主机文件。

<VirtualHost *:80>
ServerName aoi.domain.com
DocumentRoot /var/www/rails/aoi.domain.com/public

PassengerRuby /home/deploy/.rbenv/versions/1.8.7-p375/bin/ruby

# Relax Apache security settings
<Directory /var/www/rails/aoi.domain.com/public>
  Allow from all
  Options -MultiViews
  # Uncomment this if you're on Apache > 2.4:
  Require all granted
</Directory>

我尝试以 www-data 用户和 deploy 用户的身份运行 Apache,我尝试将目录同时添加到 www-data:www-data 和 deploy:deploy,并且我已将 www-data 用户添加到部署组,以便用户应该能够使用部署用户的 rbenv ruby​​,但所有这些都失败了。

非常感谢任何想法。

更新了虚拟主机配置

<VirtualHost *:80>
ServerName aoi.domain.com

PassengerRoot /home/deploy/.rbenv/shims/passenger
RailsBaseURI /
PassengerAppType Rack
<Location />
  PassengerBaseURI /
  PassengerAppRoot /var/www/rails/aoi.domain.com
</Location>


# Relax Apache security settings
<Directory /var/www/rails/aoi.domain.com/public>
  PassengerEnabled On
  PassengerRuby /home/deploy/.rbenv/versions/1.8.7-p375/bin/ruby

  Allow from all
  Options -MultiViews
  # Uncomment this if you're on Apache > 2.4:
  Require all granted
</Directory>

【问题讨论】:

  • Passenger 5 将需要一个机架文件。所以你需要一个config.ru 文件。 rails 2 网站有吗?
  • 不,Rails 2 应用程序没有机架文件。不过我可以做一个。
  • 你能把网站更新到更高版本的 rails 2 吗?当我使用 nginx 在乘客 5 上放置一些 rails 2 应用程序时,我将它们撞到 2.3.18 并且它们可以工作。 rake rails:update 是你的朋友 :)
  • 这对我来说需要对 13 个单独的应用程序进行相当多的更改。我不希望不得不做如此激烈的事情:)
  • 我一直在尝试更新一个应用程序作为测试。 rake rails:update 没有显示警告,我已经更改了 environment.rb 中的 rails 版本,并将应用程序控制器从 application.rb 移动到 application_controller.rb,但我对这个错误非常满意。 /var/www/rails/aoi.domain.com/vendor/rails/activesupport/lib/active_support/dependencies.rb:469:in 'load_missing_constant': uninitialized constant Inflector (NameError)

标签: ruby-on-rails ruby apache ubuntu rbenv


【解决方案1】:

首先你需要设置

PassengerRoot #add the path to your passenger binaries
RailsBaseURI /
PassengerAppType Rack
<Location />
    PassengerBaseURI /
    PassengerAppRoot /var/www/rails/aoi.domain.com
</Location>
<Directory /var/www/rails/aoi.domain.com/public>
    PassengerEnabled On
    # and add your other settings
</Directory>

请注意,它不是指向公共,而是指向应用程序根目录。 然后将以下行放入您的 aoi.domain.com/config.ru - 如果它不存在,请创建它。

require "config/environment"

use Rails::Rack::LogTailer
use Rails::Rack::Static
run ActionController::Dispatcher.new

【讨论】:

  • 感谢您的想法。我只是将顶部添加到我的 vhost 配置文件中,并将 config.ru 添加到我的应用程序中,但在重新启动 Apache 后,我仍然只看到一个目录列表。还有其他想法吗?
  • 你想如何访问你的应用,你能告诉我你想通过哪个网址访问它吗?
  • 我为它创建了一个 DNS 记录。我想通过aoi.domain.com 访问它(这是真实域的占位符)。显然,目前它还没有公开工作。
  • 我在上面进行了修改以显示我当前的配置。不幸的是,Apache 不再启动。
猜你喜欢
  • 2014-02-08
  • 2017-01-27
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多