【问题标题】:Run "passenger start" from within a shell script?从 shell 脚本中运行“乘客启动”?
【发布时间】: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" ] &amp;&amp; return,它说,如果一个人没有看到这个,就不要做任何其他事情。花了很多时间来理解这一点。
  • 哇,我还没试过,但我的 bashrc 文件确实包含 [ -z "$PS1" ] && return # 如果不是交互式运行,不要做任何事情。我敢打赌这就是问题所在,大声笑!非常感谢,萨里森!

标签: ruby-on-rails rvm passenger


【解决方案1】:

如果您可以毫无问题地手动运行乘客,那么您现在处于一个很好的位置:)。 我想在您登录时设置的环境变量存在一些问题,但在运行脚本时没有。尝试在脚本开头添加这两行:

source ~/.bash_profile
source ~/.bashrc

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2016-06-08
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多