以下是我的/ etc / apache2 / sites-available / default文件
的内容NameVirtualHost *:80
<VirtualHost *:80>
ServerName domain.com
# !!! Be sure to point DocumentRoot to ('public')!
DocumentRoot /var/www
</VirtualHost>
<VirtualHost *:80>
ServerName a.domain.com
# !!! Be sure to point DocumentRoot to ('public')!
DocumentRoot /home/user/A/public
<Directory /home/user/A/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName b.domain.com
# !!! Be sure to point DocumentRoot to ('public')!
DocumentRoot /home/user/B/public
<Directory /home/user/B/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName c.domain.com
# !!! Be sure to point DocumentRoot to ('public')!
DocumentRoot /home/user/C
<Directory /home/user/C/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
意图是&#34;链接&#34;子域名(例如a.domain.com)到在特定端口上运行的Rails应用程序(在同一服务器上有多个低强度Rails应用程序)。上面显示的配置可以重定向到相应的静态页面AND / OR rails应用程序,除了其中一个有问题:
通过以下方式访问时,有问题的Rails应用程序正常运行: domain.com:port(或domain.com:4444)
然而,当尝试通过以下方式访问相同的Rails应用程序时: c.domain.com(链接到Rails应用程序所在目录的子域) 它抛出了这个错误:
https://github.com/net-ssh/net-ssh (at master) is not yet checked out. Run `bundle install` first. (Bundler::GitError)
要清楚,当从domain.com:port访问时,相同的Rails应用程序正常工作,但c.domain.com失败
由于集合中的一个Rails应用程序正常运行而另一个失败,我发现这非常令人费解。到目前为止,我在搜索中找不到这样的内容。
非常欢迎提出问题和建议。
谢谢你, 〜艾伦
NEWS: 我还在阅读文档,试图理解为什么通过端口或子域(domainname.com:port .vs.sub.domainname.com)访问rails应用程序的行为有所不同。但是,我确实确定了apache是目录结构的所有者,有助于通过子域工作来访问。 (apache user = www-data)
chown -R www-data:www-data /home/user/app
解决了其中一个rails应用的问题。公共目录中还有一个.htaccess文件,必须将其删除,并且需要使用此版本的bundle命令:
bundle install --path vendor/bundle
在子域上运行的其他应用程序不需要。
我似乎在技术上已经解决了这个难题,但是我仍然不理解为什么它对于一个应用程序而不是另一个应用程序是必要的。
答案 0 :(得分:0)
您的文档是否所有符号链接都在同一个RAILS_ROOT目录中?或者每个文档根目录中都有应用程序的副本吗?