如何在 Cloud9 上使用 Rails Composer 和 postgreSQL 并在 Heroku 上部署

How to use Rails Composer and postgreSQL on Cloud9 and deploy on Heroku

使用 Rails Composer to create a rails app using postgreSQL on Cloud9 和在 Heroku 上部署的过程充满了警告和错误,可能会让新开发人员感到困惑。是否有任何说明可以帮助我完成整个过程并部署我的入门应用程序?

我相信 rails composer、cloud9 和 heroku 以及后者推荐的 postgreSQL 数据库,尽管一起使用它们有很多小细节,没有一个来源阐明如何绕过.在花了很多个晚上解决之后,我创建了以下说明列表,这些说明在发布日期和时间有效。

  • 在 cloud9 上创建一个新工作区
  • 在您的工作区设置 postgreSQL 数据库:

    $ sudo 服务 postgresql 启动

    $ sudo sudo -u postgres psql

    postgres=# 创建用户用户名超级用户密码'password';

    创建角色

    postgres=# \q

选择一个在 heroku 上可用的应用程序名称,因为它要么是您拥有的,要么仍然在 heroku 上可用。您可以通过访问 [潜在域名].herokuapp.com

查看可用性
$ mkdir ["your app's directory/domain name"]

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

Rails Composer 使用的当前 gems 使用 ruby 版本 2.2.3 因此必须使用以下代码安装在 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

接下来,设计要求将超长密钥设置为环境变量。一旦创建了 rails 应用程序,rake 就可以使用 cl 上的 $ rake secret 命令生成这样的密钥。由于我们还没有使用 composer 来生成我们的 rails 应用程序,rake 将无法工作。不过,我们将使用 James Badger 在他的博客 post、Generate a New Secret Token for Rails Apps 中描述的 irb 和 securerandom 来做同样的事情:

$ 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 变量。右键单击终端并选择“重新启动所有终端”将在 cloud9 中执行此操作。重新启动您的终端可能 return 您会进入根目录。如果是这种情况,请使用以下命令更改到 cl 中的新应用程序目录:

$ cd [your app directory]

现在你已经准备好加速了Rails Composer

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

以下是我的 rails 作曲家选择,尽管您的选择可能有所不同,但它们可能对您有用。

构建入门应用程序?:3 -- 选择创建自定义 rails 应用程序

开发服务器:4 - puma

生产服务器:1 - 与开发相同

开发数据库:2 - PostgresSQL

模板引擎:2 - Haml

测试环境:2 - rspec with capybara

连续测试:1 - none

前端框架:2 -- bootstrap 3.3

电子邮件支持:1 -- none

身份验证:2 -- 设计

设计模块:1 -- 使用默认模块设计

权限:1 -- none

表单生成器gem:2 -- 简单表单

添加页面:5 -- 主页、关于和用户

添加Bootstrap 页面模板? [您可以在 startbootstrap.com 模板网页上查看选项。]

设置本地化?:[return/nothing 英文]

页面浏览分析:2 -- Google 分析

在 google 上生成了一个 google 分析 ID 并将其输入。

准备部署:2 -- heroku

禁用 Rails Turbolinks?: n

禁止蜘蛛:n

创建 github 存储库:n -- 我计划使用 bitbucket

为环境变量添加gem和文件?: 1

在开发过程中减少资产记录器噪音:y

在开发过程中使用“better_errors”改进错误报告? y

在开发和测试期间使用“pry”作为控制台替换:y

使用“rubocop”来确保您的代码符合 Ruby 风格指南? y

创建项目特定的 rvm gem集? y

添加“ruby赛车手”? n

[正在创建应用程序!]

PostgreSQL 的用户名(留空以使用应用程序名称)用户名 # 根据我在上面输入的内容创建本地 pg 数据库

database.yml 中的 PostgreSQL 主机? (留空以使用默认套接字连接)留空

password # 也给出了我在上面输入的内容来创建本地 pg 数据库

可以删除所有名为 [您的应用程序名称] 的现有数据库吗? y

在 git 上提交最终更改 Rails Composer 似乎出于某种原因跳过了最后一次提交...执行以下操作:

$ git add .

$ git commit -am “Final rails_composer commit”

按照 bitbucket 上的说明为现有项目创建新存储库并从命令行推送到它

按照 heroku 上 ‘getting started with rails’ 的说明进行操作,其中包括以下内容:

$ heroku login

根据提示输入您的 heroku 凭据。

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

使用以下命令验证 heroku remote 是否已添加:

$ 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

[过程文件]

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

希望这些说明有用。请随时添加和改进它们。