2016-12-19 23 views
3

奇妙な設定のビットですが、プロジェクトを開始するためにComposerがローカル環境で使用されているプロジェクトがあります。オリジナルの開発者はプロダクションサーバーへのsshアクセス権を持っていなかったため、ローカルでComposerを使用し、FTPを使用してデスクトップからサーバーに 'vendor'ディレクトリをアップロードしました。行うこれらのComposerをローカルで使用してからFTP経由でファイルをアップロードする

Desktop/composer.json 
Desktop/composer.lock 
Desktop/vendor/autoload.php 
Desktop/vendor/composer/* 
Desktop/vendor/phpmailer/* 

cd Desktop/ 
composer require phpmailer/phpmailer 

これは私のデスクトップに次のような構造を作成しました:私は今では私のMac上でローカルに次のことを行っているPHPMailerパッケージを追加する必要が

私はFTP経由でアップロードする必要がありますか?私はvendor/phpmailer/*が私が欲しいパッケージだと気付くので、アップロードが必要です。

他はどうなりますか?すでにオートローダが設定されているので、ここではvendor/autoload.phpを推測する必要はありませんか?

composer.json私は既にそこにあるものにパッケージを追加できます。

"require": { 
    *other packages here* 
    "phpmailer/phpmailer": "^5.2" 
} 

しかし、それは必要だ場合、私はすべての更新プログラムを実行するために、サーバー上のssh /作曲を使用するつもりはないので、私は確認されませんでしたか?

+0

phpmailerに必要なものによって異なります。空のプロジェクトを作成し、作曲家にphpmailerだけを要求してみてください。どのパッケージが正常に動作し、FTPクライアント経由でアップロードする必要があるかを確認するだけです。 –

+0

あなたは 'vendor'に何もアップロードしません。 'composer.lock'をサーバにアップロードし、サーバ上で' composer install'を実行します。 – ceejayoz

+3

@ceejayozは投稿を再読しました - コンポーザーコマンドを実行するためのサーバーへのアクセス権はありません! – Andy

答えて

2

通常のワークフローは次のようになります。

  1. チェックアウト、バージョン管理から現在のバージョン。
  2. コマンドラインcomposer require new/packageで依存関係を追加します。
  3. これは、新しいパッケージをダウンロードし、オートローディングを更新します。
  4. 結果をローカルまたはテスト用のWebサイト環境でテストします。
  5. 結果に満足すれば、フォルダ全体を運用サーバーにアップロードします。

この一般的なワークフローからいくつかの例外があるかもしれません:

広告1:なしバージョン管理がない場合、あなたは今、地元のGitのレポを開始するのはおそらくより良いだろう、と現在の生産状況をダウンロード最初のコミットとしてそれに入ります。バージョン管理をしていないと、特に既知の作業バージョンに戻ることが難しくなります。運用サーバー上のファイルはおそらく管理されていない可能性があるため、新しく作成したバージョンコントロールにフォルダをチェックインして、これらのファイルに対する変更をキャンセルしないようにしてください。

ad 2:手動でcomposer.jsonファイルを手動で編集するのは、自分が何をしているか分かっている場合には、より速い方法ですが、JSONを正しく編集する必要があります。私にとっては、すでにコマンドラインが用意されていれば、それは大変面倒です。このコマンドは、すでにインストールされている依存関係に適合する一致するバージョンも選択します。手動編集では、解凍しなければならないバージョンの競合が発生する可能性があります。本番環境では、PHPバージョンで動作する依存関係のみをインストールしてください。 composer.jsonファイルにプロダクションバージョンのPHPを追加するには、composer config platform.php X.Y.Zを実行する必要があります。これにより、開発者PHPに基づいてComposerが依存バージョンをインストールできなくなります。 -gスイッチを追加すると、グローバル(ユーザー)設定にこの設定が追加されます。この設定は、他のプロジェクトでも起動するすべてのコンポーザの操作に影響します。

ad 3:手動編集では、コマンドラインでcomposer updateを実行する必要があります。そのため、代わりにcomposer requireを実行する必要はありません。

ad 4:これはどのような環境で作業しなければならないかによってまったく異なります。

ad 5:この段階では、実際のウェブサイトを作成するために必要なすべてのファイルを組み立てています。アップロードを何らかの方法で失敗しない限り、それらをプロダクションにアップロードすると、常に正常なウェブサイトが作成されます。また、FTPが信頼できない恐れがある場合は、「一時フォルダに最初にアップロードしてから、サーバー上で移動する」アプローチを使用することもできます。いくつかの人々は異なるアプローチを取っています。彼らは本番サーバー上にgitリポジトリを持ち、そのリモートのリポジトリにライブする必要があるバージョンを単にプッシュします。ポストプッシュスクリプトの中にはcomposer installが実行されます。この自動化されたアプローチも機能しますが(FTPは使用しませんが)、展開中に何らかの不具合が発生する可能性が高く、以前の状況に戻っても簡単ではないでしょう。

最終的に私は、FTPを使ってフォルダ構造全体をアップロードすることは安全ではないことを示しています(FTPS(SSL付きFTP)、SFTP、またはSCP)運用サーバー上で

アップロードするフォルダに関する具体的な質問:すべて特に、vendorフォルダ全体をアップロードしてください。現在のオートローダーとソフトウェアに必要なすべての依存パッケージが含まれています。正しく動作した場合は、既存のcomposer.jsoncomposer.lockファイルをダウンロードして、新しい依存関係を追加しました。これにより、これらのファイルが両方とも変更され、新しいパッケージがvendorフォルダに追加され、クラスがオートローダーに追加されました。

vendorフォルダの一部のみをアップロードしたり、オートローディングのコンポーネントを手動で編集したりしないでください。誤ってアスペクトを行うと、後に来るデベロッパーの驚きを作成するだけでなく、時間もかかります。 Composerは依存関係を管理するための非常に優れたツールです - それを使用してください!

+0

-1あなたのgitのベンダーにチェックインすることを提案します。それは単に必要ではありません。バージョンの保存には、満足のようなツールを使用するか、手動でtarballを作成します。あなたのgitにベンダーを含めれば、コンポーザー全体のコンセプトは時代遅れです。 –

+0

@JochenSchultz:私は私の答えをもう一度読んで、私はベンダーをチェックするのを忘れました。たぶんあなたは私のためにそれを指摘することができます。 – Sven

0

サーバーからローカルサーバーにcomposer.jsonをコピーし、要件を追加してコンポーザーの更新を実行できます。

あなたは(あなたのサーバーへのcomposer.json、composer.lockとベンダーのフォルダ)のすべてのファイルをコピーすることができた後

...


それとも、サーバベンダーフォルダにローカルベンダー/ phpmailerのをコピーすることができ、検索ベンダー/コンポーザー/ autoload_psr4.phpのphpmailerを入力し、それをサーバーvendor/composer/autoload_psr4.phpに追加します。

この方法を使用する場合も、同様にphpmailersの依存関係を追加します。

composer depends phpmailer/phpmailer 
+1

-1は、フォルダや自動読み込みを行うことを示唆していますが、単にそれに値するものではありませんが、間違いや厄介な驚きを招く可能性があります。 – Sven

+0

ftpのものを使ってアップロードするベンダー全体が厄介です... 私の顧客プロジェクトで同じ問題が発生したとき、私はそれらに満足サーバーを設定させ、PHPスクリプトを使ってsatis.jsonを生成しました。 composer.jsonを自動的に作成します。もちろん、ベンダフォルダ内のファイルを作成することはお勧めしません。しかし、「顧客:私はこのスクリプトを15秒で実行する必要があります」という点では役立つかもしれません。 –

+0

OPのコメントを読むとhttp://stackoverflow.com/questions/41224832/using-composer-locally-then-uploading-files-through-ftp/41229978?noredirect=1#comment69677811_41224832あなたはわかりますこの質問は、一般的なケースではなく、対処しなければならない状況に特化したものであること。 – Sven

関連する問題