【问题标题】:Installing memcached on Amazon Linux在 Amazon Linux 上安装 memcached
【发布时间】:2020-12-24 19:54:49
【问题描述】:

我正在尝试在 Amazon Linux EC2 实例上将 memcached 用于 PHP。在我的 PHP 脚本中,当我调用 $mc = new Memcached(); 时,/var/log/php-fpm/www-error.log 中会引发以下错误:

[06-Sep-2020 00:49:44 UTC] PHP Fatal error:  Uncaught Error: Class 'Memcached' not found in /var/app/current/memcached.php:8
Stack trace: #0 {main}
  thrown in /var/app/current/memcached.php on line 8

调用php -m 我没有看到memcached 列出,我认为这意味着它没有安装。

所以,我首先尝试:

sudo yum install memcached
sudo yum install php70-pecl-memcached

以及对 /etc/php.ini 的编辑以包含

session.save_handler = memcached
session.save_path = "127.0.0.1:11211"

here 所述,但没有运气。

接下来,我尝试了 AWS 支持here 为 Amazon Linux EC2 v1 概述的建议。查看cfn-init-cmd.log,包libmemcached 安装成功,但是,当它尝试安装memcached 时脚本失败,因为它无法按照命令01_install_memcached 找到/use/bin/pecl7。作为参考,我在.ebextensions/memcache.config 中的完整脚本是:

packages:
  yum:
    libmemcached-devel: []

commands:
  01_install_memcached:
    command:  /usr/bin/yes 'no'| /usr/bin/pecl7 install memcached
    test: '! /usr/bin/pecl info memcached'
  02_rmfromphpini:
    command: /bin/sed -i -e '/extension="memcached.so"/d' /etc/php.ini
  03_createconf:
    command: /bin/echo 'extension="memcached.so"' > /etc/php-7.3.d/41-memcached.ini
    test: '/usr/bin/pecl7 info memcached'

关于如何解决的任何想法?

【问题讨论】:

  • 如果您ssh到EB实例,您可以手动安装它并使其工作吗?这将允许您验证您尝试自动化的步骤。
  • 在解释 YAML 和 .ebextensions 时我有点新手,所以我根据脚本运行了以下命令:'sudo yum install -y libmemcached-devel', next @987654340 @,然后从/etc/php.ini/, created a new file /etc/php.d/41-memcached.ini` 中删除memcached.so 行与extension="memcached.so" 行,最后重新启动实例...然后成功!所以对脚本进行了两处更改,首先使用pecl 而不是pecl7,其次是memcached.ini 文件的目录以反映实例上的内容
  • 刚刚测试了一个修改后的脚本,它似乎可以工作。我想我有点惊讶这是让 memcache 在 Amazon Linux 2 实例上与 PHP 一起工作所必需的,因为我认为它是默认安装的。
  • @qwertytam 特别是当您需要它来使用 AWS Elasticache 时。对我来说似乎有点失败。

标签: php amazon-web-services memcached ebextensions amazon-linux-2


【解决方案1】:

所以这个稍作修改的.ebextension 脚本起作用了。我不是 AWS/Linux/PHP 专家,所以可能有更正确的方法来解决这个问题。

packages:
  yum:
    libmemcached-devel: []

commands:
  01_install_memcached:
    command:  /usr/bin/yes 'no'| /usr/bin/pecl install memcached
    test: '! /usr/bin/pecl info memcached'
  02_rmfromphpini:
    command: /bin/sed -i -e '/extension="memcached.so"/d' /etc/php.ini
  03_createconf:
    command: /bin/echo 'extension="memcached.so"' > /etc/php.d/41-memcached.ini

【讨论】:

    【解决方案2】:

    我通过将 memchache 直接添加到安装中解决了这个问题

    packages:
      yum:
          libmemcached-devel: []
           memcached
    commands:
      01_rmfromphpini:
        command: /bin/sed -i -e '/extension="memcached.so"/d' /etc/php.ini
      02_createconf:
        command: /bin/echo 'extension="memcached.so"' > /etc/php.d/41-memcached.ini
    

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2020-11-14
      • 2016-01-25
      相关资源
      最近更新 更多