在:
上部署RoR应用我正在以root用户身份进行部署以尝试解决问题。当我运行Apache并点击应用程序时,我在我的log / production.log中得到了他的错误(当然Rails的HTTP 500 HTML出现在浏览器上):
F, [2013-10-24T21:54:50.253917 #29204] FATAL -- :
Errno::EACCES (Permission denied - /depot/tmp/cache):
app/views/store/index.html.erb:11:in `_app_views_store_index_html_erb___649405275_79899210'
我做了一些搜索,可能是用户权限问题。我查看了在我的服务器上运行各种进程的用户。这是一个top
转储:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3520 1696 1276 S 0.0 0.3 0:00.76 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.36 ksoftirqd/0
5 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kworker/u:0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.14 watchdog/0
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
12 root 20 0 0 0 0 S 0.0 0.0 0:00.04 sync_supers
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khubd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
20 root 20 0 0 0 0 S 0.0 0.0 0:00.25 kworker/u:1
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
22 root 20 0 0 0 0 S 0.0 0.0 0:00.65 kswapd0
23 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 fsnotify_mark
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ecryptfs-kthrea
26 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto
34 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld
37 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0
38 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_1
58 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 devfreq_wq
248 root 20 0 0 0 0 S 0.0 0.0 0:00.57 jbd2/vda-8
249 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ext4-dio-unwrit
313 root 20 0 2816 428 428 S 0.0 0.1 0:00.05 upstart-udev-br
316 root 20 0 3088 724 724 S 0.0 0.1 0:00.03 udevd
411 root 20 0 3084 276 272 S 0.0 0.1 0:00.00 udevd
412 root 20 0 3084 280 276 S 0.0 0.1 0:00.00 udevd
426 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused
553 root 20 0 2828 200 196 S 0.0 0.0 0:00.00 upstart-socket-
580 messageb 20 0 3240 428 428 S 0.0 0.1 0:00.00 dbus-daemon
622 syslog 20 0 30020 1008 952 S 0.0 0.2 0:00.71 rsyslogd
636 root 20 0 4612 776 656 S 0.0 0.2 0:00.00 getty
637 root 20 0 4612 776 656 S 0.0 0.2 0:00.00 getty
650 root 20 0 4612 772 656 S 0.0 0.2 0:00.00 getty
651 root 20 0 4612 768 656 S 0.0 0.2 0:00.00 getty
655 root 20 0 4612 776 656 S 0.0 0.2 0:00.00 getty
663 root 20 0 2156 592 496 S 0.0 0.1 0:00.00 acpid
664 root 20 0 2600 848 680 S 0.0 0.2 0:00.02 cron
666 daemon 20 0 2452 344 220 S 0.0 0.1 0:00.00 atd
745 root 20 0 6664 2348 1912 S 0.0 0.5 0:00.00 sshd
751 root 20 0 4612 776 660 S 0.0 0.2 0:00.00 getty
7272 mysql 20 0 319m 36m 7044 S 0.0 7.5 0:03.82 mysqld
7625 root 20 0 8176 4352 2688 S 0.0 0.9 0:00.82 apache2
28278 root 20 0 0 0 0 S 0.0 0.0 0:00.00 flush-253:0
28554 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kworker/0:2
28681 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kworker/0:0
28970 root 20 0 11408 3340 2616 S 0.0 0.7 0:00.04 sshd
28984 depot 20 0 11408 1560 832 S 0.0 0.3 0:00.02 sshd
28985 depot 20 0 10168 6552 1596 S 0.0 1.3 0:00.35 bash
29102 www-data 20 0 8216 2208 524 S 0.0 0.4 0:00.00 apache2
29103 root 20 0 7256 1704 1504 S 0.0 0.3 0:00.00 PassengerWatchd
29106 root 20 0 34652 2868 2376 S 0.0 0.6 0:00.17 PassengerHelper
29111 nobody 20 0 16992 3776 3032 S 0.0 0.7 0:00.00 PassengerLoggin
29121 www-data 20 0 225m 2628 840 S 0.0 0.5 0:00.00 apache2
29122 www-data 20 0 226m 3412 1556 S 0.0 0.7 0:00.00 apache2
29185 www-data 20 0 48496 39m 3852 S 0.0 7.9 0:02.97 ruby1.9.1
29204 www-data 20 0 68052 47m 3972 S 0.0 9.5 0:00.24 ruby1.9.1
29229 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/0:1
29321 depot 20 0 2720 1048 844 R 0.0 0.2 0:00.00 top
您可以看到apache2正在“root”和“www-data”用户下运行,并且该ruby正在“www-data”用户下运行。我试图将应用程序目录的所有权更改为“root”和“www-data”都无济于事。
对this question的评论似乎暗示在“root”下部署可能是导致问题的原因。我假设这意味着我必须以root用户之外的用户重新安装我的ruby,apache和passenger。如果我错过了一些更简单的东西,这似乎有点极端。
有什么想法吗?
答案 0 :(得分:1)
好的,我不能声称知道linux用户权限,但对我来说有用的是重新安装apache,passenger,ruby,rails,app和所有依赖项作为用户与root 不同。这似乎解决了问题,并且没有出现许可被拒绝的问题。
<强>更新强> 我应该修改我的解决方案,提到我重建了服务器并在非root用户下完成了上述所有操作(所以我没有重新安装任何东西,我从头开始重新创建整个堆栈)。
答案 1 :(得分:0)
最有可能的是,这是自动用户切换功能的效果。有关答案,请参阅http://www.modrails.com/documentation/Users%20guide%20Apache.html#user_switching。
“在root下部署”并不意味着Passenger是以root用户身份安装的。他的意思是他的应用程序归root所有。该文档清楚地解释了该场景中发生的情况:出于安全原因,Passenger将拒绝以root身份运行应用程序,并将该应用程序作为“PassengerDefaultUser”运行(默认为您计算机上的www-data)。