質問

capistrano を使用して、Rails アプリケーションを Mac OS X 10.5 から CentOS 5.2 にデプロイしています。

deploy.rb とサーバー環境は 1 年以上変わっていないことに注意してください。

というタスクがdeploy.rbファイル内にあります。 upload:

put(File.read( file ),"#{shared_path}/#{filename}", :via => :scp)

これは、次の例外を除いて毎回失敗します。

No such file or directory - /srv/ourapp/releases/20100104194410/config/database.yml

config/database.yml のローカル コピーが正しくアップロードできません。これは 3 つの異なる接続と 2 つの異なるシステムで発生するため、私たちのインターネット接続ではないことを確認しました。

また、output() を Upload() に交換しようとしましたが、同じ結果が得られました。また、 :via => :scp を削除したり、代わりに :sftp を強制しようとすると、同様に失敗します。

関連情報:

$ CAP -V Capistrano V2.5.10

$ ruby​​ -v Ruby 1.8.7(2008-08-11 Patchlevel 72)[i686-Darwin9.6.0

役に立ちましたか?

解決

私が正しくあなたの質問を理解していれば、

、それはカピストラーノが正常にファイルをアップロードされたように聞こえるが、Railsはそれがdeploy.ymlファイルを見つけることができないため、起動に失敗しています。これはカピストラーノは、それがCapistranoのエラーのように見せること、deploy:restartタスクの一部として展開中に起こっている可能性があります。

あなたはカピストラーノは/svr/ourapp/shared/し、ファイルをアップロードしているとRailsは、ほぼ間違いなく/svr/ourapp/releases/20100104194410/config/でそれを探している与えてくれた情報に基づいています。

その場合は、

、何をする必要がありますと、そのタスクがfinalize_update後に実行されるようにフックを追加し期待場所に共有データベースファイルをシンボリックリンクタスクを作成しています。たとえばます:

task :symlink_database do
  run "ln -s #{shared_path}/database.yml #{latest_release}/config/database.yml"
end

after 'deploy:finalize_update', :symlink_database

他のヒント

namespace :deploy do
  task :upload_settings, :roles => :app do
    run "mkdir -p #{shared_path}/config/"
    top.upload "config/database.yml", "#{shared_path}/config/database.yml", :via => :scp
  end

  task :symlink_yml, :roles => :app do
    run "ln -sf #{shared_path}/config/database.yml #{release_path}/config/database.yml"
  end
end

after 'deploy:setup', 'deploy:upload_settings'
after 'deploy:update_code', 'deploy:symlink_yml'

これは、サーバー側のビューから純粋であるが、あなたは、あなたがアップロードに使用しているユーザーがディレクトリのための適切な権限を持っていることを確認するためにチェックしている?

サーバー環境に応じて、ユーザー(またはグループ)を再帰的に変更を行うと、この問題を解決する必要があります。

chown -R user_name_here /srv/ourapp/releases/
chgrp -R group_name_here /srv/ourapp/releases/

また、任意のコードリポジトリなどをクリーンアップすることがありますgit gcまたはsvn cleanup。ならびに任意のシンボリックリンクを更新します。

「そのようなファイルまたはディレクトリはありません」エラーは、存在しない宛先パスにファイルをコピーしようとすると発生します。私の知る限り、Capistrano の put メソッドと Upload メソッドはファイルの転送を試みるだけで、必要なパスを作成しません。このファイルをアップロードしようとしているときに、config/ ディレクトリ、あるいはshared_pa​​th自体が作成されていない可能性はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top