【问题标题】:Moving Laravel 4 files to Production Server FTP (cPanel)将 Laravel 4 文件移动到生产服务器 FTP (cPanel)
【发布时间】:2014-05-05 17:12:07
【问题描述】:

我已经在我的生产服务器上成功安装了 laravel 版本 4.1.24(使用 softaculous),现在我想将我的应用程序从我的本地机器移动到生产服务器(cPanel 类型的网络托管),但我有一个一时间搞清楚怎么做的家伙。我在网上找到了一些讨论类似问题的论坛,但没有任何帮助。我需要移动哪些文件?我可以通过 FTP 移动它们吗?我不熟悉任何其他方法。

更多细节:当我复制“app”和“public”文件夹中的所有关键文件时,我收到一个错误,它无法识别我的模型类。当我复制所有内容(包括“供应商”和“引导程序”时,它仍然无法识别我的模型类)。以前一定有人这样做过。你做了什么?

更新:
我越来越接近问题了。我从本地和生产环境中的全新安装开始,并移动/覆盖了以下文件夹的文件:
/app/controllers
/app/models
/app/views

还移动/覆盖了 app/filters.php 文件。除了“公共”文件夹之外,到目前为止,它几乎包含了我的整个应用程序。

然后我复制了一个只有一个路由的超级精简的 app/routes.php 文件:

Route::get('/', function()
{
$users = User::where('id', '<' ,'100')->whereNotNull('first_name')->get();

    foreach($users as $user){
        echo $user->first_name . '<br>';
    }
});

这在本地和生产上都按预期工作!然后我将路线更改为以下内容:

Route::get('/', function()
{
$cars = Car::where('id', '<' ,'100')->get();

    foreach($cars as $car){
        echo $car->name . '<br>';
    }
});

这在本地环境中工作得很好,但在生产中它返回“找不到类'汽车'”错误。这是我的问题,我认为 user2094178 在他/她提到运行“composer dump-autoload”时遇到了一些问题。知道如何使用 cPanel 远程执行此操作吗?

更新 #2
我找到了这个帖子:How to avoid using php composer dump-autoload with laravel 4?。这似乎解决了完全相同的问题。除了我所有的模型都已经在“模型”文件夹中,所以app_path().'/models', 应该已经在加载我的类了。对吧?

另外,我在 cmets 中找到了“bootstrap/autoload.php”文件:

“Composer 为我们的应用程序提供了一个方便的、自动生成的类加载器......我们将在此处将其添加到脚本中,这样我们就不必担心“手动”加载我们的任何类。”

接下来是:

require __DIR__.'/../vendor/autoload.php';

我害怕修改这个文件,因为我不知道我在里面做什么。然后,这使我找到了其他一些同样缺乏方向的文件。有什么想法吗?

更新 3:
看起来 Laravel 3 有这样的东西:http://three.laravel.com/docs/loading。我需要了解如何在 Laravel 4 中做到这一点。

【问题讨论】:

  • 为什么你需要在本地和生产中单独安装 Laravel,为什么不在本地安装和设置 Laravel,然后通过 FTP 传输整个项目。
  • @har2vey 您是否尝试过转移所有内容?我很好奇它是否对你有用,因为它对我不起作用。我想知道是否有特定于我的本地机器的东西需要更改。任何想法可能是什么? ...但我已经无能为力了,所以我相信我明天会再试一次。
  • 你有相同的本地和生产服务器目录结构吗?如果是,您的生产 php 服务器是否与 laravel 4 所需的最低要求兼容?如果您使用的是 cPanel 和 FTP,则可能不是。
  • 您还需要检查您的主机的 PHP 版本和所需的扩展(mycrypt 等),在 cPanel 上运行的旧主机可能在 5.2 版上运行
  • @user2094178 据我所知,目录结构看起来相同。另外,是的,它安装了 laravel 4.1.24(使用 softaculous)。

标签: ftp laravel-4 cpanel


【解决方案1】:

您必须复制所有文件,并小心 conf/local,因为您的本地配置可能不在您的通用文件中。

记住你需要安装

PHP >= 5.3.7 MCrypt PHP 扩展 PHP JSON 扩展

如果你打算开发网络应用程序,你应该学习一个版本控制软件,gitmercurial

使用 git,将项目转移到生产环境就像在 shell 中输入命令一样简单,您可以将代码副本安全地保存在另一个地方,例如 githubbitbucket

您还有更复杂的部署软件,例如 capistrano,它们可以让您完全控制您的部署。

即使您可以使用 php 作为服务场所,例如 http://fortrabbit.com/

除了使用 ftp 之外,我向您推荐的任何一个都远不止于此。

【讨论】:

  • 谢谢。 har2vey 还提到了 mcrypt 扩展。我不熟悉那个文件。我该怎么办?此外,服务器正在运行 php 版本 5.3.28。那这行不通吗?最后,我一直在避免学习 git 之类的版本控制软件,但听起来我真的应该去那里。我知道从长远来看它会有所回报,但我一直在避免前期投资。
  • 如果您有 ssh 访问权限,请尝试php -i | grep mcrypt 进行检查,否则请编写类似 info.php 的文件并添加 &lt;?php phpinfo(); ?&gt; 并从浏览器中检查。如果您使用 laravel 或其他类似框架,则必须学习 git,我还建议您将项目放在具有 ssh 访问权限的主机中,是的,您也应该学习一些 linux 控制台基础知识。
  • 所以我应该检查文件是否存在?它应该在哪里?关于 git 和 linux 的好建议,但我认为这不会解决我眼前的问题。
【解决方案2】:

当我从 laravel 收到 not found 控制器类时,这意味着我忘记运行 composer dump-autoload

为避免这种情况,请打开文件 app/start/global.php 并确认您在 ClassLoader::addDirectories array 中具有所需的路径。

不需要composer dump-autoload 对我来说效果很好。由于它不扫描子目录,当您开始按目录组织模型和控制器时,您可能会后悔使用它。

如果您愿意考虑使用命名空间来摆脱composer dump-autoload,请阅读以下内容:

https://github.com/daylerees/autoload-demo

【讨论】:

  • 让我的托管公司启用 SSH 并运行 composer dump-autoload 工作。谢谢!关于您的其他建议:我所有的模型类都在app/model 目录中(不在子目录中),默认情况下在app/start/global.phpClassLoader::addDirectories array 中列出。它仍然对我不起作用。我会看看你在下面发布的线程。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 2022-01-08
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2019-05-08
相关资源
最近更新 更多