0

我有一个远程 SQLSERVER 实例,我想从托管在 heroku 上的 rails 应用程序进行连接。我的宝石文件:

gem 'activerecord-sqlserver-adapter', '~> 3.2.12'
gem 'tiny_tds'

数据库.yml

production:
  adapter: sqlserver
  mode: dblib
  dataserver: host.database.windows.net
  database: items
  username: username@host
  password: password
  azure: true

生产.rb

dbconfig = YAML.load(ERB.new(File.read(File.join("config","database.yml"))).result)
ActiveRecord::Base.establish_connection dbconfig['production']

但我在部署过程中遇到以下错误:

编写 config/database.yml 以从 DATABASE_URL 读取

Preparing app for Rails asset pipeline

Running: rake assets:precompile

rake aborted!

LoadError: Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (sqlite3 is not part of the bundle. Add it to Gemfile.)

似乎活动记录需要 sqlite3 但如果我有 tiny_tds 它应该使用 sql server。

在开发环境中一切正常。当然,我缺少一些东西。

更新

我已经设置了自定义 buildpack BUILDPACK_URL:https ://github.com/firmhouse/heroku-buildpack-ruby-freetds.git 和 DATABASE_URL 配置变量。

更新 2

在部署时制作一个 dbconfig var 的 pp 显示这个

{"production"=>
       {"adapter"=>"sqlite3",
       "database"=>"dbname",
       "username"=>"user",
       "password"=>"pass",
       "host"=>"127.0.0.1"}}

似乎 heroku 覆盖了我的 database.yml 文件,有什么建议吗?

更新 3

我设置了 DATABASE_URL=sqlserver//user:pass@host:1433/database 这是错的吗?

4

2 回答 2

2

我遇到了同样的问题,终于找到了答案。

你必须把后缀放在下面:

?encoding=uft-8&azure=true

因此,您的 database_url 将如下所示:

sqlserver://[user]:[password]@[server.database.windows.net]:1433/[database]?encoding=uft-8&azure=true

希望能帮助到你

于 2018-02-05T19:03:31.440 回答
0

看起来您需要使用自定义 buildpack

在 Heroku 上使用这个 FreeTDS buildpack

要使用此 buildpack,您可以在创建 Heroku 应用程序时传入一个选项:

heroku create my_new_sqlserver_app --buildpack https://github.com/firmhouse/heroku-buildpack-ruby-freetds.git

或者对于当前的应用程序:

heroku config:add BUILDPACK_URL=https://github.com/firmhouse/heroku-buildpack-ruby-freetds.git

配置数据库连接

创建应用程序或设置现有应用程序以使用 buildpack 后,您需要修改DATABASE_URLconfig 变量以指向您的 sqlserver 实例。我们目前使用 SQL Server 2008 Express 版本:

heroku config:add DATABASE_URL=sqlserver://username:password@sqlserver_host:1433/database_name
于 2014-06-25T13:30:40.253 回答