Я новичок в Ruby on Rails и хотел создать сканер, который очищает данные и вставляет их в базу данных. В настоящее время я использую Heroku, поэтому я не могу получить доступ к базе данных напрямую, и мне было интересно, как лучше всего интегрировать скрипт сканера в структуру RoR. Я бы использовал ежечасный или ежедневный cron для запуска скрипта.
Вставить в базу данных Rails
Ответы (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.
Я бы предложил 1 из 2 вариантов:
Используйте ruby-скрипт, который использует
require rubygems
вместе с другими вспомогательными библиотеками (например, Rails, ActiveRecord и т. д.), которые вы хотите выполнить, а затем выполните cron этого скрипта.Если вы используете Rails для обслуживания веб-приложений, используйте файл hosts компьютера, чтобы
wget
(или аналогичный) на этом компьютере правильно сопоставлял запросы с этим экземпляром rails; оттуда просто настройте его как веб-приложение и используйте командуwget
в своем CRON. Не очень эффективно, но если вы просто ищете что-то быстрое и грязное, основанное на существующей настройке, это сработает хорошо. Просто не забудьте отправитьSTDOUT
иSTDERR
на/dev/null
, чтобы не накапливать CRON-файлы.