質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

2回答

2195閲覧

cakePHP3をCapistranoでデプロイしたい

tuntun34

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2016/05/09 14:57

編集2022/01/12 10:55

###cakePHP3をCapistranoでデプロイしたい
github上にあるcakePHP3のソースをCapistranoでデプロイしたいと思っています。
フォルダ構成は以下です。

├── capistrano │   ├── Capfile │   ├── config │   ├── lib │   └── log ├── current -> /hoge/fuga/releases/20160509123213 ├── releases │   ├── 20160508132358 │   ├── 20160508170830 │   ├── 20160508172906 │   ├── 20160509112513 │   └── 20160509123213 │ ├── REVISION │ ├── bin │ ├── config │ ├── docs │ ├── index.php │ ├── logs │ ├── phpunit.xml.dist │ ├── plugins │ ├── src │ ├── tests │ ├── tmp │ ├── vendor -> /hoge/fuga/shared/vendor │ └── webroot └── shared └── vendor

Git上ではvendorを管理していないため、シンボリックリンクを貼っています。

あるはずのControllerが見つからないとエラーが発生する


src以下に配置しているUsersControllerが無いと言われてしまう。

###試したこと
20160509123213以下のvendorのシンボリックリンクを一旦削除し、
直接vendorフォルダを配置すると、正常に動作しました。

おわりに

CapistranoでデプロイしGit上でvendorを管理しない以上、
直接配置するのではなく、シンボリックリンクを貼らなければならないと思っています。
なぜvendorがシンボリックリンクだとこのようなエラーが出るのか?
そしてvendorを直接配置せずにvendorのシンボリックリンクを貼る方法で、
正常に動作させるにはどうしたらいいのかをご教示いただければと思います。

追記1

シンボリックリンクの表現を変更しました。

追記2

httpd.conf

<Directory /> Options FollowSymLinks AllowOverride All </Directory>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

// 既に解決済みかもしれませんが
ComposerのAutoloadに起因するものだと思います。
Composerから生成される shared/vendor/composer/autoload_psr4.php が恐らく以下のようになっていると思います。

PHP

1// autoload_psr4.php @generated by Composer 2 3$vendorDir = dirname(dirname(__FILE__)); 4$baseDir = dirname(dirname($vendorDir)); 5return array( 6... 7 'App\\' => array($baseDir . '/src'), 8);

これにより、releases以下のファイルでなく親の方のディレクトリでAppを参照しようとしているため読めていません。
綺麗かはわかりませんが、デプロイタスクにcomposerを実行しておらず、CakePHP以外で参照していない場合は以下に書き換えれば良いと思います。
(すぐに思いついたものですので、他にも良い方法があるとは思います。)

PHP

1// autoload_psr4.php @generated by Composer 2 3$vendorDir = dirname(dirname(__FILE__)); 4// $baseDir = dirname(dirname($vendorDir)); 5$baseDir = ROOT; // CakePHPのROOTです。

※本来はアプリのバージョンごとでライブラリのバージョンも異なる可能性があるので、
シンボリックリンクを使わずにバージョンで composer install を行い自動テスト〜デプロイすべきだとは思います。
諸々の事情でライブラリが固定、シンボリックリンクで参照とする場合の方法かと思います。

投稿2016/05/18 02:05

編集2016/05/18 02:07
qlbs

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

恐らくですが・・・

vendor -> ../../shared/vendor

シンボリックリンクが相対パスになっているのが原因かと思います。
デプロイ後の"シンボリックリンクvender"と"shared/vender"の相対パスがずれているのではないか確認してみて下さい。

この場合、相対パスを調整するか、絶対パスにすればいいかと思います。

投稿2016/05/09 15:28

tonarino210

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuntun34

2016/05/09 15:36

ご回答ありがとうございます。 実際には絶対パスで指定されているのですが、ディレクトリ名を公にしたくなかったために、上記のような書き方にしてしまいました。 誤解を生むような表現にしてしまい申し訳ありませんでした。
tonarino210

2016/05/09 15:44

なるほど、承知しました。 となると、原因がちょっと分からないですね・・・ デプロイ後にシンボリックリンクを張るという事は試されましたか? これで成功しない場合、私ではお力添え出来ないですね・・申し訳ありません。
tuntun34

2016/05/09 15:49

はい、試しましたがダメでした。 いえいえ、お力添えありがとうございました。
tonarino210

2016/05/09 15:59 編集

ちょっと別の設定の確認ですが。 そもそも、Webサーバのディレクティブ設定でシンボリックリンクの使用許可がないということはありませんか? 「Options FollowSymLinks」のような設定です。 (apache前提の設定例で、すみません)
tuntun34

2016/05/09 16:48

追記2のとおり、使用許可はありそうです。 またその設定を上書きしている箇所もありませんでした。
tonarino210

2016/05/09 18:06

ここまでの成功/失敗の例からすると後はshared/venderのパーミッションくらいしか思い当たる部分がないですね(CakePHPとCapistranoに対して私の知識不足というのが大きいですが)・・・長々とコメントすみませんでした^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問