【问题标题】:How to make a symlink in a deployed website如何在已部署的网站中创建符号链接
【发布时间】:2018-01-10 05:49:06
【问题描述】:

我是 Laravel 的新手,如您所知,为了访问存储的文件,您应该有一个从 storage/app/public 到 public/storage 的符号链接。在计算机中,您只需输入命令行:php artisan storage:link。但现在我已经将我的网站部署在主机上,并想创建一个符号链接。我该怎么做?

【问题讨论】:

  • 是共享主机吗?

标签: php laravel deployment symlink


【解决方案1】:

恐怕这在共享主机上几乎是不可能的,因为您需要一个 shell 访问权限才能在您的计算机上创建相同的符号链接。

根据您的选择,Laravel Forge 可能对您有所帮助。

亲切的问候

【讨论】:

    【解决方案2】:

    如果您可以在您的作曲家的“scripts”标签中添加一个调用,以便在项目部署后创建链接:

    composer.json文件:

    "scripts": {
        "post-root-package-install": [
            "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postInstall",
            "php artisan optimize"
            "php artisan storage:link"
        ],
        "post-update-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
            "php artisan optimize"
            "php artisan storage:link"
        ]
    }
    

    这将导致每次发生**composer update****composer install** 调用时都会创建链接。

    如果未创建存储文件夹,您将收到:

    The [public / storage] directory has been linked.
    

    如果已经创建:

    The "public / storage" directory already exists.
    

    另请参阅可能对您有帮助的讨论:https://github.com/laravel/internals/issues/34

    【讨论】:

    • 那我怎样才能调用 composer update 或 composer install 让它做一个符号链接?这是制作这个符号链接的最佳实践吗?
    • 部署 laravel 应用程序时,这包括强制检查依赖项(调用 composer update 或 composer install)。如果您不手动执行此操作,则部署您的 laravel 应用程序的系统会执行此操作。现在,如果这是一个好的做法,我引用链接的讨论有几种不同的意见,现在我引用的这种方式也被 laravel 社区的最大贡献者之一 barryvdh 引用了一点不同。
    • 将其添加到 composer.json 但没有任何改变。
    【解决方案3】:

    Cron 作业在共享主机上对我有用。 只需将 cron 作业配置为在下一分钟(或特定的关闭时间)运行命令,然后将其删除。

    例如,这将在上午 9:30 运行命令并将任何输出记录到 myjob.log

    30 9 * * * /path/to/php /path/to/artisan storage:link >> /path/to/myjob.log 2>&1
    

    【讨论】:

    • 我该如何配置 cron 作业?
    • 取决于您的主机,在 CPanel 上,应该有一个图标(大部分在底部),名称为 Cron 或 Cron Job。您可以联系您的房东确认这一点
    • 是的,有一个 cron 作业,但它要求我在其中输入文件名。例如 cron.php。用 cron.php 写什么?执行('smth')?还是
    • 我试图想象你的 cron 界面是什么样子的。如果它请求文件和参数/参数之类的东西,那么要运行的文件是artisan,参数/参数将是storage:link
    • 不,它只需要文件。它是 000webhost 托管。您只需输入文件名。
    【解决方案4】:

    只需在 php 文件中创建一个符号链接并将其上传到您的公共文件夹,然后通过浏览器导航到它。 链接必须是绝对路径....

    $targetFolder = '/home/account_name/laravel/storage/app/public';
    
    $linkFolder = '/home/account_name/public_html/storage';
    
    symlink($targetFolder, $linkFolder);
    
    echo 'Done!'
    

    让我们将文件保存为link.php并上传,然后通过http://your_site.com/link.php导航到它

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多