1

最初の Rails アプリを Linode VPS で稼働させることに非常に近づいていますが、cap deploy:cold の終わり近くで奇妙なエラー メッセージが表示され続けます。私はrailscasts 335に従って、nginx、Unicorn、PostgreSQL、rbenvなどを使用してRailsアプリをVPSにデプロイしました(残念ながらWindowsマシンから)。Linode Ubuntu 10.04 LTS プロファイルでホストしています。デプロイの終わり近くに、次のエラー メッセージが表示されます。

  * ←[32m2013-04-24 13:08:13 executing `deploy:start'←[0m
  * ←[33mexecuting "sudo -p 'sudo password: ' /etc/init.d/unicorn_wheretoski start"←[0m
    servers: ["xxx.xx.xxx.242"]
    [xxx.xx.xxx.242] executing command
 ** [out :: xxx.xx.xxx.242]
 ** [out :: xxx.xx.xxx.242] sudo: /etc/init.d/unicorn_wheretoski: command not found
 ** [out :: xxx.xx.xxx.242]
    ←[2;37mcommand finished in 309ms←[0m
failed: "env PATH=$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH sh -c 'sudo -p '\\''
sudo password: '\\'' /etc/init.d/unicorn_wheretoski start'" on xxx.xx.xxx.242

サーバーにアクセスすると、ファイルが見つかります

:~/apps/wheretoski/current$ ls /etc/init.d/unicorn_wheretoski
/etc/init.d/unicorn_wheretoski

deploy.rb から

namespace :deploy do
  %w[start stop restart].each do |command|
    desc "#{command} unicorn server"
    task command, roles: :app, except: {no_release: true} do
      sudo "/etc/init.d/unicorn_#{application} #{command}"
    end
  end 
......

そして unicorn_init.sh から

#!/bin/sh
set -e

# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/home/deployer/apps/wheretoski/current
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="cd $APP_ROOT; bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"
AS_USER=deployer
set -u

OLD_PIN="$PID.oldbin"

sig () {
  test -s "$PID" && kill -$1 `cat $PID`
}

oldsig () {
  test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
}

run () {
  if [ "$(id -un)" = "$AS_USER" ]; then
    eval $1
  else
    su -c "$1" - $AS_USER
  fi
}

case "$1" in
start)
  sig 0 && echo >&2 "Already running" && exit 0
  run "$CMD"
  ;;

次に、VPS に向かい、さまざまなコマンドを実行しようとしましたが、次のコマンドを実行するとエラーが発生しました。

deployer@li543-242:~/apps/wheretoski/current$ bundle exec unicorn -D -c $/home/apps/wheretoski/current/config/unicorn.rb -E production
/home/deployer/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/bundler-1.3.5/lib/bundler/rubygems_integration.rb:214:in `block in replace_gem': unicorn is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
        from /home/deployer/.rbenv/versions/1.9.3-p125/bin/unicorn:22:in `<main>'

VPS で echo $PATH を取得すると、次のようになります。 sbin:/usr/bin:/sbin:/bin:/usr/games:/home/deployer/.rbenv/versions/1.9.3-p125/bin

プロダクション グループのユニコーン ジェムとメイン ジェムの両方で試しましたが、どちらも同じエラー メッセージが表示されました。サーバーの現在のフォルダーにある Gemfile.lock を開くと、Unicorn は仕様の下ではなく、依存関係の下にのみ表示されます。

助けてくれてありがとう!!

4

1 に答える 1

0

さて、ここでいくつかの問題がありました。

1 - ローカル マシンとサーバーに異なるバージョンのバンドラーがありました。

2 - Windows マシンでの開発。Unicorn gem を gemfile のプロダクション グループに配置する必要がありましたが、何らかの理由で gemfile.lock が正常に作成されませんでした。Mac を持っている仲間に私のコードを引っ張ってもらい、ユニコーンを gemfile のメイン セクションに移動して、バンドルでインストールしてもらいました。これにより、現在サーバーで使用されている優れた Gemfile.lock が作成されました。

これが他の人に役立つかどうかはわかりませんが、かなり奇妙なエラーです。

于 2013-05-01T19:31:56.207 に答える