通过单独的Ruby脚本通过Rails模型访问数据库

时间:2015-07-27 10:35:59

标签: ruby-on-rails ruby

我有一个带有数据库的Rails应用程序(使用ActiveRecord的PostgreSQL)

在同一台服务器上的一个单独目录中,我有一个Ruby脚本。

我如何从Ruby脚本通过我的一个Rails模型到达Rails数据库?

我已经看到可以要求ActiveRecord并传入数据库详细信息,但据我所知,我需要重建模型,这意味着需要重复验证,方法等等。相反,我会喜欢以某种方式使用已经存在的模型。

3 个答案:

答案 0 :(得分:1)

我找到了一个具有我正在寻找的行为的解决方案,并将其发布为以后遇到此问题的任何人的答案。

设置ENV['RAILS_ENV'] = "production"然后在Ruby脚本中简单地要求environment.rb文件(带有适当的路径)可以很好地解决问题。

这类似于@MurifoX提供的答案,但可以节省您重新声明数据库连接的时间。

答案 1 :(得分:1)

尝试使用rails runner。根据:http://guides.rubyonrails.org/command_line.html#rails-runner

  

runner以非交互方式在Rails的上下文中运行Ruby代码。对于   实例:

bin/rails runner "Model.long_running_method"

根据我的经验,这可以很好地运行依赖Active Record等的脚本。

将-e开关添加到命令以强制使用生产数据库连接:

bin/rails runner -e staging "Model.long_running_method" 

添加完成数据库连接可能需要的任何其他环境变量。如果您使用Devise gem,您还需要传递一个秘密以允许完成Devise初始化。其他宝石可能同样需要一些帮助才能开始。

答案 2 :(得分:0)

您可以使用require传递模型的相对路径,然后将其用作实例。

require '/path/to/your/model/inside/your/app'

model = Model.new 

对于连接,如果您使用postgresql,则可以使用PGconn gem中的pg类,如下所示:

@connection = PGconn.open(
  :user => 'postgres', 
  :password => 'password', 
  :host => 'host', 
  :dbname => 'dbname')
相关问题