如何为我独立的Ruby脚本设置Rails环境?

Nic*_*ick 8 ruby ruby-on-rails

我在我的Rails应用程序中有一个Ruby脚本,用于从Twitter加载一些数据.

在未来,我将使它成为一个自动后台进程,但现在我手动运行它,如:

ruby /lib/twitter/twitterLoad.rb
Run Code Online (Sandbox Code Playgroud)

为了使用Rails模型类等,我将以下作为脚本的第一行:

require "#{File.dirname(__FILE__)}/../../config/environment.rb"
Run Code Online (Sandbox Code Playgroud)

默认情况下,使用开发环境.但是,我希望能够在某个时候选择生产环境.

更新#1:RAILS_ENV常量在environment.rb文件中设置.所以,我能够将ENV ['RAILS_ENV'] ='production'放在最顶层(在environment.rb之前)并解决我的问题.所以,我的新问题是,可以通过命令行传入env变量吗?

Rya*_*igg 23

如果您打算使用rails环境,最好的办法是将其作为rake脚本.要执行此操作,请将twitter.rake文件放入lib/tasks中,然后以这样的方式开始和结束:

task(:twitter_load => :environment) do
  # your code goes here
end
Run Code Online (Sandbox Code Playgroud)

这样,你就是通过"遵循惯例"来实现的,并且它没有那种与之相关的难闻气味.


Gar*_*ett 10

我目前使用以下方法,我知道环境没有rb扩展名,不需要它.您也可以在运行它之前设置它来覆盖ENV["RAILS_ENV"].

#!/usr/bin/env ruby

# Set your environment here.
ENV["RAILS_ENV"] ||= "production"

require File.dirname(__FILE__) + "/../../config/environment"

puts "Rails was loaded!"

然后要更改环境,只需运行它:

rb /lib/tasks/file.rb RAILS_ENV=development


Mik*_*use 5

不要忘记脚本/跑步者.

从命令行设置环境变量

ruby script/runner your_script_here.rb
Run Code Online (Sandbox Code Playgroud)

  • 在3.0+中,使用`rails runner path/to/script`.注意:脚本的路径是相对于项目根目录的,而不是工作目录. (3认同)