【发布时间】:2012-03-27 00:59:30
【问题描述】:
基本上,“乘客启动”在终端上可以正常工作,但是像“乘客启动”这样的简单脚本不起作用,因为它失败了:
*** Exception PhusionPassenger::UnknownError in PhusionPassenger::Rack::ApplicationSpawner (Could not find abstract-1.0.0 in any of the sources (Bundler::GemNotFound)) (process 19278, thread #<Thread:0x7f16dbfaf368>):
在我看来,它再也找不到宝石了。这似乎是谷歌上一个很常见的问题,但我找不到任何简单的答案。我不想用这样的东西来修补我的 Rails 应用程序:http://blog.ninjahideout.com/posts/the-path-to-better-rvm-and-passenger-integration(无论如何我实际上无法开始工作)
似乎没有简单的方法来处理这个问题。为什么从 shell 脚本运行乘客与手动输入有什么不同?
更新:基本上,我通过不使用乘客来修复它。我现在使用“rails server”而不是使用“passenger start”,它工作正常。现在,很明显,这并不能“解决”我遇到的问题,但足以满足我的开发需求。
我还想详细说明一下我的设置,因为我觉得我有点含糊。
基本上,我有一个名为 start_rails.sh 的脚本
#!/bin/bash
cd /rails/app
passenger start
它没有用,我在阳光下尝试了所有方法,包括采购我所有的 bash 文件,但没有任何效果。我把它改成:
#!/bin/bash
source "$HOME/.rvm/scripts/rvm"
cd /rails/app
rails s
现在它可以工作了。我可以从新贵脚本运行它:
start on started mysql
exec sudo -u ubuntu -i /home/ubuntu/bin/start_rails.sh
但是,“乘客启动”仍然不起作用,从来没有,而且我想永远不会 =P 我仍然不知道为什么没有办法运行 shell 脚本并告诉它“运行它就像我一样是手动输入的”,因为只需输入“passenger start”就可以了。从一个shell脚本,它没有。那好吧。生活还在继续。
【问题讨论】:
-
脚本是否从您在命令中输入的同一目录运行?尝试在脚本前面加上 cd /path/to/application;
-
登录用户的世界不同于非终端用户的世界。通过 ssh 登录,你会得到路径,颜色等等。但是当你是一个非终端用户时,情况就不同了。 Crontab 任务似乎以用户身份运行,但在非终端环境中运行。 Capistrano 任务也可能遭受同样的命运。关键行在
.bashrc中,.bash_profile经常调用它,它有这个部分:# If not running interactively, don't do anything [ -z "$PS1" ] && return,它说,如果一个人没有看到这个,就不要做任何其他事情。花了很多时间来理解这一点。 -
哇,我还没试过,但我的 bashrc 文件确实包含 [ -z "$PS1" ] && return # 如果不是交互式运行,不要做任何事情。我敢打赌这就是问题所在,大声笑!非常感谢,萨里森!
标签: ruby-on-rails rvm passenger