【问题标题】:Passenger Error: No such file or directory - config/environment.rb乘客错误:没有这样的文件或目录 - config/environment.rb
【发布时间】:2023-03-20 20:40:01
【问题描述】:

我正在尝试将我的第一个 rails 应用程序部署到使用 Capistrano 部署的 Ubuntu/Apache/Passenger 服务器上。我已经设置了一个虚拟主机来指向我所有 Rails 应用程序所在的目录:

这是我的虚拟主机文件:

<VirtualHost *:80>
    ServerName rails.mydomain.com
    ServerAlias rails.mydomain.com
    DocumentRoot /var/www/vhosts/rails.mydomain.com
    <Directory /var/www/vhosts/rails.mydomain.com>
            Allow from all
            AllowOverride all
            Options -MultiViews -Indexes
    </Directory>

    # PassengerAppRoot /var/www/vhosts/rails.mydomain.com
    RailsBaseURI /myappname
    # RailsBaseURI /myappname2
    # RailsBaseURI /myappname3

    Include /etc/apache2/production-expires.conf
    CustomLog /var/log/apache2/rails.mydomain.com-access_log common
    ErrorLog /var/log/apache2/rails.mydomain.com-error_log
</VirtualHost>

加载 Rails 应用程序 (rails.mydomain.com/myappname) 后,我得到:

Error message:
     No such file or directory - config/environment.rb
Exception class:
    Errno::ENOENT
Application root:
    /var/www/vhosts/rails.mydomain.com 

config/environment.rb 在那里,我在运行 cap deploy 后通过 SSH 验证了它的存在。

所以我错过了什么,我觉得有些东西没有正确指向,你可以看到应用程序根指向我的 /rails.mydomain.com 文件夹,而不是实际的 /rails.mydomain.com/myappname 文件夹。

【问题讨论】:

  • 这可能是权限问题。有时 Apache 需要访问整个文件夹树才能访问您的文件,即它需要能够拥有 /var/www/vhosts 的权限,而不仅仅是 /rails.mydomain.com 只是一个想法。
  • @FareeshVijayarangam 我相信这已经被允许了,我不是 apache 专家......但在 /vhosts 我有一个我认为允许这样做的默认文件(就像我说的,没有专家)跨度>
  • 我相信您的DocumentRoot 需要指向您的rails 应用程序的public 文件夹
  • 那么我将如何运行多个应用程序呢?我需要为 /rails 文件夹中的每个应用程序创建一个虚拟主机,并且该虚拟主机的 documentroot 需要指向应用程序文件夹?

标签: ruby-on-rails ruby-on-rails-3 apache ubuntu passenger


【解决方案1】:

根据Passenger docs(参见“3.1. 部署到虚拟主机的根目录”),您需要将 DocumentRoot 设置为应用程序的公共目录。试试这个:

DocumentRoot /var/www/vhosts/rails.mydomain.com/public
<Directory /var/www/vhosts/rails.mydomain.com/public>
            Allow from all
            Options +MultiViews
</Directory>

【讨论】:

  • 我已经阅读了这个文档几次......我想我只是不明白如何部署到非 root 用户,我的虚拟主机的 root 只是多个应用程序所在的位置。我的文件夹实际上是/var/www/vhosts/rails.mydomain.com/myappname/public - 这是我迷路的地方
【解决方案2】:

您是否将 myappname 符号链接到应用的公共目录?

ln -s /path/to/the/myappname/public/ /var/www/vhosts/rails.mydomain.com/myappname 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多