Ошибка в Magento 1.6 с напоминалкой смены телефонного номера

При логине администратора система из-за ошибки в программе каждый раз пишет: «Reminder: Change Magento`s default phone numbers and callouts before site launch«. После удаления в менеджере сообщений при очередном логине запись появляется вновь. Отключение всего модуля проблему не решает: действительно важные сообщения в таком случае также не высвечиваются.

Для решении проблемы нужно скопировать файл app/code/core/Mage/AdminNotification/Model/Resource/Inbox.php в app/code/local/Mage/AdminNotification/Model/Resource и в 102 строке заменить

$select = $adapter->select()
  ->from($this->getMainTable())
  ->where('url=?', $item['url']);

на

$select = $adapter->select()
  ->from($this->getMainTable())
  ->where('url=? OR url IS NULL', $item['url'])
  ->where('title=?', $item['title']);

Удаляем старые сообщения и радуемся спокойной жизни

Magento ругается на отсутствие папки tmp

Если Magento вылетает со следующим сообщением: «Could not determine temp directory, please specify a cache_dir manually«, значит модуль в Zend, предназначенный для поиска места под кэш не смог справится со своей задачей. В моём случае оттого, что у провайдера руки под что-то другое заточены и папка для кэша, указанная в настройках PHP не имеет разрешения для зависи туда. То есть папку Zend находит, а писать туда не может.

Один вариант – подправить index.php в корне Magento-игсталляции и дописать туда

putenv('TMPDIR='.$_SERVER["DOCUMENT_ROOT"].'/var/tmp' );

Но у меня этот вариант не всегда хорошо работал. Иногда выскакивала всё таже ошибка. Тогда я пошёл на радикальные меры и подправил код непосредственно в Zend. Это не лучшее решение (в плане переходов на новые версии Magento, но зато надёжно работает).

Открываем файл /lib/Zend/Cache/Backend.php
ищем там функцию getTmpDir(), находим там if ($this->_isGoodTmpDir(‘\\temp’)) и дописываем else {return ‘var/tmp/’;}
Вот что должно получиться:

if ($this->_isGoodTmpDir('\\temp')) {
  return '\\temp';
} else {
  return 'var/tmp/';
}

После этого проблем с кэшем не наблюдалось.

Ошибка в Magento 1.6.1.0-rc1

При попытке экспорта списка товаров в Magento система выдаёт ошибку

Fatal error: Class 'CapacityWebSolutions_ImportProduct_Model_Convert_Adapter_Product' not found in .../includes/src/Mage_Dataflow_Model_Convert_Action_Abstract.php on line 182

Не мудрствуя лукаво, открываем файл /includes/src/Mage_Catalog_Model_Convert_Adapter_Product.php, находим в нём строку 182 и перед ней добавляем магическое заклинание:

if ($class == 'CapacityWebSolutions_ImportProduct_Model_Convert_Adapter_Product') $class = 'Mage_Catalog_Model_Convert_Adapter_Product';

после этого функция getContainer выглядит следующим образом:

public function getContainer($name=null)
{
  if (!is_null($name)) {
    return $this->getProfile()->getContainer($name);
  }

  if (!$this->_container) {
    $class = $this->getParam('class');
    if ($class == 'CapacityWebSolutions_ImportProduct_Model_Convert_Adapter_Product') $class = 'Mage_Catalog_Model_Convert_Adapter_Product';
    $this->setContainer(new $class());
  }
  return $this->_container;
}

Всё! Теперь сохраняемся и экспортируем список товаров.

ExecJS::RuntimeError with Rails 3.1 в продуктивном режиме

При установке нового проекта на сервер с RubyOnRails 3.1.0 сталкнулся с ошибкой

ExecJS::RuntimeError
Could not find a JavaScript runtime

После некоторых экспериментов нашёл простое решение: в Gemfile добавляем следующие строки:

group :production do
  gem 'therubyracer'
end

потом

bundle install

и всё в ажуре!

Авторизация через SSH без паролей

Для этого создаём пару ключей на компьютере, с которого будем входить в аккаунт сервера назначения без пароля.

ssh-keygen -t rsa

После этого закидываем полученный public key на нужный сервер(а):

cat ~/.ssh/*.pub | ssh user@remote-system 'umask 077; cat >>.ssh/authorized_keys'

Готово!