【问题标题】:Sinatra + Heroku + Datamapper deploy issues with dm-sqlite-adapterSinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题
【发布时间】:2012-02-13 07:49:32
【问题描述】:

出于某种原因,heroku 尝试要求 dm-sqlite-adapter,即使它应该在这里使用 Postgres。请注意,这发生在我打开任何 URL 时 - 而不是在 git push 本身期间。

我构建了一个默认的 Facebook 应用程序。

宝石文件:

source :gemcutter

gem "foreman"

gem "sinatra"
gem "mogli"
gem "json"
gem "httparty"
gem "thin"
gem "data_mapper"
gem "heroku"

group :production do
    gem "pg"
    gem "dm-postgres-adapter"
end

group :development, :test do
    gem "sqlite3"
    gem "dm-sqlite-adapter"
end

数据映射器设置:

# Setting up the database
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/data/mydatabase.db")

相关日志片段,当打开任何 URL 时:

Starting process with command `bundle exec thin -R config.ru start -p 34984`
2012-01-18T15:11:55+00:00 app[web.1]: /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `require': no such file to load -- dm-sqlite-adapter (LoadError)
2012-01-18T15:11:55+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/dm-core-1.2.0/lib/dm-core/adapters.rb:163:in `load_adapter'

尝试了相关的解决方案,但到目前为止没有任何帮助。

顺便说一句:bundle install 表示 Using do_postgresUsing dm-postgres-adapter。我是否缺少有关 Datamapper 设置的信息?

【问题讨论】:

  • 尝试使用development:test 的值设置BUNDLE_WITHOUT 的配置变量,看看会发生什么
  • 我猜当我发出git push heroku master:Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment时它已经运行了
  • 可以在本地使用 Postgres 吗?真是个好主意:12factor.net/dev-prod-parity
  • 不错的网站,以前没见过。 TBH,重点是制作一个模拟应用程序,使用最简单的路径。现在我只是在浪费时间修补 dm 适配器,而不是完成任务。
  • 这表明 DATABASE_URL 环境变量不知何故未设置。你把它去掉了吗?当你运行heroku config时它会出现吗?

标签: ruby heroku sinatra datamapper


【解决方案1】:

嗯,Heroku 上的 Rails 应用程序太多,我认为共享数据库的存在是理所当然的。 heroku config 既没有显示DATABASE_URL 也没有显示SHARED_DATABASE_URL 设置。

发出heroku addons:add shared-database:5mb 解决了这个问题。

奇怪,尽管 Gemfile 中有 'pg' gem,但没有自动添加 db。

引用http://devcenter.heroku.com/articles/cedar:

Heroku 共享 PostgreSQL 数据库 (shared-database:5mb) 将是 在以下任何情况下自动添加到您的应用中:

  • 该应用是 Rails 应用
  • pg gem 在Gemfile 中指定

【讨论】:

  • 奇怪,我以前见过一次,但一直无法复制它
  • 大家好,这在我使用 Active Record 时并没有发生在我身上,但在我使用 DataMapper 时发生了。另外我是免费帐户,所以我不得不使用heroku addons:add heroku-postgresql
【解决方案2】:

尝试改用DataMapper.setup(:default, ENV['DATABASE_URL'] || 'postgres://user:password@hostname/data/mydatabase.db')。 Heroku 可能正在查看协议,因此需要 SQLite 的依赖项。

【讨论】:

  • 我也这么认为,但是我更改了代码以将代码包装在配置语句中,它仍然做同样的事情。configure :development do DataMapper.setup(:default,"sqlite3://#{Dir.pwd}/recall.db") end configure :production do DataMapper.setup(:default, ENV['DATABASE_URL']) end 另外,我假设 sn-p 读取 ENV['DATABASE_URL'] = true并且不评估 or 语句的 RHS。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2011-07-14
  • 2015-02-16
  • 2011-07-29
  • 1970-01-01
  • 2011-08-30
  • 2011-01-18
  • 2016-11-25
相关资源
最近更新 更多