【问题标题】:Centos+Apache+passenger+rails: running rails apps from your www folderCentos+Apache+passenger+rails:从您的 www 文件夹运行 rails 应用程序
【发布时间】:2014-06-03 16:01:28
【问题描述】:

我正在努力学习 Rails,所以我是新手,希望得到一些帮助。

我正在尝试一次运行多个应用程序,但遇到了一个奇怪的问题。当我尝试用 rails 生成东西时,它给了我一个权限错误。我查看了 stackoverflow 和其他几个网站,但没有找到任何好的解决方案。

详情: 此设置在以下位置成功运行了两个 Rails 应用程序:

  1. http://rails.mechapps.co/
  2. http://slide.mechapps.co/

2 当前由于缺少控制器而显示错误(2014 年 4 月 19 日上午 12:30)。但是,当我导航到该应用程序的目录并运行“rails 生成控制器幻灯片视图”时,我收到此错误:

$ rails generate controller slideshow create
/usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/env.rb:68:in `initialize': Permission denied @ rb_sysopen - /tmp/spring/bff8002d6fbedba8d81e3befe2342559.pid (Errno::EACCES)
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/env.rb:68:in `open'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/env.rb:68:in `open'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/env.rb:68:in `server_running?'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:18:in `call'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/command.rb:7:in `call'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/rails.rb:23:in `call'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/command.rb:7:in `call'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client.rb:26:in `run'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/bin/spring:48:in `<top (required)>'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/binstub.rb:11:in `load'
from /usr/local/rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/binstub.rb:11:in `<top (required)>'
from /var/www/html/slide.mechapps.co/slide/bin/spring:16:in `require'
from /var/www/html/slide.mechapps.co/slide/bin/spring:16:in `<top (required)>'
from bin/rails:3:in `load'
from bin/rails:3:in `<main>'

这是我的设置: /etc/http/conf/httpd.conf:

...
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.1.1/gems/passenger-4.0.41
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.1/wrappers/ruby
</IfModule>
...
RackEnv development
<VirtualHost *:80>
    ServerName rails.mechapps.co
    DocumentRoot /var/www/html/rails.mechapps.co/blog/public
        <Directory /var/www/html/rails.mechapps.co>
                AllowOverride all
                Options -MultiViews
        </Directory>
</VirtualHost>
<VirtualHost *:80>
    ServerName slide.mechapps.co
    DocumentRoot /var/www/html/slide.mechapps.co/slide/public
        <Directory /var/www/html/slide.mechapps.co>
                AllowOverride all
                Options -MultiViews
        </Directory>
</VirtualHost>

我的根目录的权限:

drwxr-xr-x [user] [group] 4096 Apr 18 23:17 rails.mechapps.co
drwxr-xr-x [user] [group] 4096 Apr 19 04:22 slide.mechapps.co

App Directory 的权限:

-rw-rw-r-- 1 [user] [group] 1337 Apr 19 04:22 Gemfile
-rw-rw-r-- 1 [user] [group] 2982 Apr 19 04:22 Gemfile.lock
-rw-rw-r-- 1 [user] [group]  478 Apr 19 04:22 README.rdoc
-rw-rw-r-- 1 [user] [group]  249 Apr 19 04:22 Rakefile
drwxrwxr-x 8 [user] [group] 4096 Apr 19 04:22 app
drwxr-xr-x 2 [user] [group] 4096 Apr 19 04:22 bin
drwxrwxr-x 5 [user] [group] 4096 Apr 19 04:26 config
-rw-rw-r-- 1 [user] [group]  154 Apr 19 04:22 config.ru
drwxrwxr-x 2 [user] [group] 4096 Apr 19 04:24 db
drwxrwxr-x 4 [user] [group] 4096 Apr 19 04:22 lib
drwxrwxr-x 2 [user] [group] 4096 Apr 19 04:22 log
drwxrwxr-x 2 [user] [group] 4096 Apr 19 04:22 public
drwxrwxr-x 8 [user] [group] 4096 Apr 19 04:22 test
drwxrwxr-x 3 [user] [group] 4096 Apr 19 04:22 tmp
drwxrwxr-x 3 [user] [group] 4096 Apr 19 04:22 vendor

我以两个位置的所有者身份登录。

我怀疑有以下问题:

  1. 同时运行多个 rails 应用程序会混淆 rails 生成器
  2. 我不知何故弄乱了 ruby​​/rails 配置,应用程序 冲突
  3. Ruby 以 root 身份安装,我的用户已添加到 rvm 组。也许这是一个 rvm 问题?

如果您知道如何解决此问题或有任何想法,请提供帮助。我花了将近 8 个小时在互联网上搜索并尝试了各种配置。谢谢!

【问题讨论】:

    标签: ruby-on-rails apache passenger


    【解决方案1】:

    同时运行多个应用不会混淆生成器 - 生成器必须成为应用实例的一部分

    Rails is a gem,这意味着它只会在自己的环境中运行——在同一台服务器上拥有多个应用程序就像说你只能在系统上开发一个应用程序

    如果您使用 SSH 来执行这些命令,您确定您拥有正确的权限吗? Apache runs its shell with the user www-data - 你没有详细说明你是如何调用这些命令的,但如果它来自 ssh - 你确定你的用户有正确的权限吗?

    我不知何故弄乱了 ruby​​/rails 配置,应用程序 矛盾的

    只有在同一个文件夹中的应用才会发生冲突。这就是 Rails 对待生成器的方式——通过在需要运行时加载环境。只要您将 Rails 应用程序保存在单独的文件夹中,您就会安然无恙

    Ruby 以 root 身份安装,并且我的用户已添加到 rvm 组。 也许这是一个 rvm 问题?

    我不认为这是 RVM - 我认为这是权限问题。 Looking online,看来您需要 chmod 您的 tmp 目录才能使其可访问和可写

    【讨论】:

    • 是的,我正在使用 SSH。我的用户是文件的所有者,并且在文件组中。文件夹设置为 775,所以我的用户肯定有 rwx。如果有的话,我不确定 apache 是否具有正确的权限。我的 apache uer 对我托管的任何网站都没有任何权利。我不确定它是如何为我的网站提供服务的 :)
    • 大声笑 - 你能设置你的 apache 用户拥有所需的权限吗?有一种方法可以访问某个 apache 文件(我忘了是哪个),它允许您定义 Apache 用户。如果你愿意,我可以查一下?
    • 不,谢谢你的提议。我的 apache 用户是 'apache' 和同一个组,我可以使用它。我将 tmp 设置为 777,没有骰子。我将组设置为 apache,甚至将 app 文件夹中的所有内容设置为 777(文件和所有内容)仍然没有。我将重新生成应用程序以重建权限结构。我很紧张将所有内容都保留为 775:/
    • VPS / centos / ruby​​ 2.1.1p76 / rails 4.1.0
    • hmmmm 我希望我能进一步帮助你,但是我不能:(如果你需要 ping 任何人的想法,只需在这里发表评论,我会看看我能发送什么
    【解决方案2】:

    好的,我想通了,我已经编辑了问题标题以澄清。

    我的问题是,我将 Rails 应用程序放入 CentOS 服务器的 /var/www/ 目录中。 Aparantly CentOS 对该文件夹有单独的安全措施,Rails 无法正确修改它。

    我将文件从 www 文件夹移动到 /apps/... 并将我的 VirtualHosts 指向那里,此后一切都一帆风顺。

    此外,我意识到由于安全问题,您永远不想在 www 文件夹中安装 rails 应用程序。 CentOS 设置为自动将您的 www 文件夹视为对公众开放。用户可能会让 Apache 为您的 Rails 应用程序文件提供服务。不好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多