Как использовать Rails Composer и postgreSQL на Cloud9 и развернуть на Heroku

Процесс использования Rails Composer для создания приложения rails с использованием postgreSQL на Cloud9 и развертывания на Heroku чреват предупреждениями и ошибками, которые могут запутать нового разработчика. Существуют ли инструкции, которые могут помочь мне пройти через процесс и развернуть мое стартовое приложение?

1 ответ

Решение

Я верю в состав rails composer, cloud9 и heroku, а также в рекомендованную последней базу данных postgreSQL, хотя их совместное использование содержит много мелких деталей, которые ни один источник не объясняет, как обойти. Проведя много ночей, работая над этим, я создал следующий список инструкций, который работает на дату и время публикации.

  • Создать новое рабочее пространство на облаке9
  • Настройте базу данных postgreSQL в своей рабочей области:

    $ sudo service postgresql start

    $ sudo sudo -u postgres psql

    postgres = # СОЗДАТЬ ИМЯ ПОЛЬЗОВАТЕЛЯ ПАРОЛЬ СУПЕРУЗЕРА 'пароль';

    СОЗДАТЬ РОЛЬ

    postgres=# \q

Выберите название приложения, которое доступно на heroku, так как оно либо есть у вас, либо еще доступно на heroku. Вы можете проверить доступность, посетив [потенциальное доменное имя].herokuapp.com

$ mkdir ["your app's directory/domain name"]

$ cd ["your app's directory/domain name"]

Текущие гемы, используемые Rails Composer, используют версию 2.2.3 ruby, поэтому их необходимо установить в rvm со следующим кодом:

$ rvm install 2.2.3

$ ruby -v

ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

$ rvm use ruby-2.2.3@[your app name] --ruby-version --create

$ gem install rails --no-ri --no-rdoc

Создайте несколько локальных переменных и сохраните в них некоторые значения.

$ echo "export USERNAME=username" >> ~/.profile

$ echo "export PASSWORD=password" >> ~/.profile

Введите доменное имя вашего приложения в качестве локальной переменной среды со следующим кодом в cl:

$ echo "export DOMAIN_NAME=[domain name].herokuapp.com" >> ~/.profile

Затем, devise требует, чтобы в качестве переменной среды был задан сверхдлинный секретный ключ. Как только приложение rails создано, rake может сгенерировать такой секретный ключ, используя $ rake secret командование по кл. Поскольку мы еще не использовали composer для создания нашего приложения rails, rake не будет работать. Однако мы сделаем то же самое, используя irb и securerandom, как описано Джеймсом Бэджером в его посте в блоге " Создать новый секретный токен для приложений Rails":

$ irb
2.2.3 :001 > require 'securerandom'
=> true 
2.2.3 :002 > SecureRandom.hex(64)
=> "137d8b4bf436e670e2eea63372494b84aa25900edb1328eb5c1367f5100fe114fc95313f8772428dbda89ed84086e87a26428ef524951f94fd0375d4e399b613"
2.2.3 :003 > exit

Мы (ты и я) должны использовать другого в производстве.

$ echo "export SECRET_KEY_BASE=137d8b4bf436e670e2eea63372494b84aa25900edb1328eb5c1367f5100fe114fc95313f8772428dbda89ed84086e87a26428ef524951f94fd0375d4e399b613" >> ~/.profile

RESTART TERMINAL, чтобы установить переменные ENV. Если щелкнуть правой кнопкой мыши в терминале и выбрать "перезапустить все терминалы", это будет сделано в облаке9. Перезапуск ваших терминалов может вернуть вас в корневой каталог. Если это так, перейдите в каталог с новым приложением в cl, используя:

$ cd [your app directory]

Теперь вы готовы запустить Rails Composer

$ rails new . -m https://raw.github.com/RailsApps/rails-composer/master/composer.rb

Ниже приведены варианты, которые могут быть полезны для вас, хотя ваш выбор может отличаться.

создать приложение для начинающих?: 3 - выбрано для создания пользовательского приложения rails

сервер разработки: 4 - пума

рабочий сервер: 1 - такой же, как разработка

разработка базы данных: 2 - PostgresSQL

шаблонный движок: 2 - Haml

тестовая среда: 2 - rspec с капибарой

непрерывное тестирование: 1 - нет

рамки внешнего интерфейса: 2 - начальная загрузка 3.3

поддержка по электронной почте: 1 - нет

аутентификация: 2 - разработка

модули devise: 1 - разработка с модулями по умолчанию

авторизация: 1 - нет

драгоценный камень строителя формы: 2 - простая форма

Добавьте страницы: 5 - Дом, О нас и Пользователи

Добавить шаблоны страницы Bootstrap? [Вы можете проверить параметры на веб-странице шаблонов startbootstrap.com.]

установить локальный?: [возврат / ничего для английского]

аналитика просмотра страниц: 2 - Google Analytics

сгенерировал идентификатор Google Analytics в Google и ввел его в.

подготовка к развертыванию: 2 - геройку

Отключить Rails Turbolinks?: n

забанить пауков: n

создать репозиторий github: n - планирую использовать bitbucket

добавить гем и файл для переменных среды?: 1

уменьшить шум регистратора активов во время разработки: y

улучшить отчеты об ошибках с 'better_errors' во время разработки? Y

используйте 'pry' в качестве замены консоли во время разработки и тестирования: y

использовать 'rubocop', чтобы убедиться, что ваш код соответствует руководству по стилям Ruby? Y

создать специфичный для проекта гемвсет rvm? Y

Добавить 'therubyracer'? N

[Создание приложения!]

Имя пользователя для PostgreSQL (оставьте пустым, чтобы использовать имя приложения) username # с учетом того, что я ввел выше для создания локальной базы данных pg

Хост для PostgreSQL в database.yml? (оставьте пустым, чтобы использовать сокет по умолчанию) оставьте пустым

пароль # также с учетом того, что я ввел выше, чтобы создать локальную базу данных pg

Хорошо, чтобы удалить все существующие базы данных с именем [имя вашего приложения]? Y

Фиксация последних изменений в git. Есть один финальный коммит, который Rails Composer, по-видимому, по какой-то причине пропускает... Сделайте следующее:

$ git add .

$ git commit -am “Final rails_composer commit”

следуйте указаниям на http://bitbucket.org/, чтобы создать новый репозиторий для существующего проекта и передать его из командной строки

Следуйте инструкциям по " началу работы с рельсами" на heroku, которые включают в себя следующее:

$ heroku login

Введите свои учетные данные герою в подсказках.

$ heroku create [your app name (without the herokuapp.com stored as a local variable above)]

Убедитесь, что удаленная герока была добавлена ​​с помощью следующей команды:

$ git config --list | grep heroku

$ git push heroku master

Теперь, когда вы создали приложение на heroku, вы также должны добавить туда некоторые переменные окружения с помощью следующих команд:

$ heroku config:set DOMAIN_NAME=[your app name].herokuapp.com

$ rake secret    # uses rake to generate a new secret key

5ed8c7d9a3bda9cec3887b61f22aa95bf430a3a550407642b96751c7ef0ce8946a161506d6739da0dcaaea8c8f4f8b3335b1fb549e3cc54f0a4cec554ede05f8

Вырежьте и вставьте этот новый секретный ключ в команду ниже, чтобы установить переменную среды Heroku.

$ heroku config:set SECRET_KEY_BASE=5ed8c7d9a3bda9cec3887b61f22aa95bf430a3a550407642b96751c7ef0ce8946a161506d6739da0dcaaea8c8f4f8b3335b1fb549e3cc54f0a4cec554ede05f8

Примечание: вы должны использовать $ rake secret сгенерировать SECRET_KEY_BASE, отличный от того, который я включил в код выше.

Теперь вы можете перенести базы данных heroku:

$ heroku run rake db:migrate

Создать Procfile

$ touch Procfile

[PROCFILE]

web: bundle exec puma -C config/puma.rb

$ touch config/puma.rb

[Config / puma.rb]

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end

Потому что я не ожидаю, что мое приложение получит слишком много трафика и не могу гарантировать, что оно поточно-ориентированное:

$ heroku config:set MIN_THREADS=1 MAX_THREADS=1

Зафиксируйте этот файл конфигурации Procfile и puma с помощью:

$ git add .

$ git commit -m "Add Procfile and config/puma.rb"

$ git push && git push heroku

Я надеюсь, что эти инструкции полезны. Пожалуйста, не стесняйтесь добавлять к ним и улучшать их.

Другие вопросы по тегам