Вставить в базу данных Rails

Я новичок в Ruby on Rails и хотел создать сканер, который очищает данные и вставляет их в базу данных. В настоящее время я использую Heroku, поэтому я не могу получить доступ к базе данных напрямую, и мне было интересно, как лучше всего интегрировать скрипт сканера в структуру RoR. Я бы использовал ежечасный или ежедневный cron для запуска скрипта.


person Michael    schedule 16.03.2011    source источник


Ответы (2)


Если вы используете Rails на Heroku, вы можете просто использовать адаптер ORM, такой как Datamapper или ActiveRecord. Затем это дает вам доступ к вашей базе данных, но в основном через слой. Если вам нужно отправить необработанный sql в базу данных, вы можете это сделать, но обычно это не рекомендуется, поскольку ORM предоставляет почти все, что вам нужно.

В основном вы просто создаете модели в своем приложении rails, такие как обычные и связанные поля в таблице.

rails g model page meta_title:string page_title:string

rake db:migrate # This has to be run on heroku too "heroku rake db:migrate" after you have pushed your code up

Затем в вашем скрипте сканера вы можете создавать записи, просто используя свою модель...

Page.create(:title => crawler[:title], :meta_title => crawler[:meta_title])

Обычно вы можете использовать Whenever (https://github.com/javan/whenever) для управления вашими cronjobs, но в Heroku я не уверен, как это работает, так как раньше я ничего не устанавливал в Heroku.

person Nick Hammond    schedule 16.03.2011

Я бы предложил 1 из 2 вариантов:

  1. Используйте ruby-скрипт, который использует require rubygems вместе с другими вспомогательными библиотеками (например, Rails, ActiveRecord и т. д.), которые вы хотите выполнить, а затем выполните cron этого скрипта.

  2. Если вы используете Rails для обслуживания веб-приложений, используйте файл hosts компьютера, чтобы wget (или аналогичный) на этом компьютере правильно сопоставлял запросы с этим экземпляром rails; оттуда просто настройте его как веб-приложение и используйте команду wget в своем CRON. Не очень эффективно, но если вы просто ищете что-то быстрое и грязное, основанное на существующей настройке, это сработает хорошо. Просто не забудьте отправить STDOUT и STDERR на /dev/null, чтобы не накапливать CRON-файлы.

person mway    schedule 16.03.2011