如果您在 Rails 应用程序中使用 Webpack,则有一个更简单的解决方案。
TLDR:使用process.env.RAILS_ENV
或process.env.NODE_ENV
在您的 webpack 编译的 javascript 文件之一中:
console.log('Rails env: ', process.env.RAILS_ENV);
console.log('Node env: ', process.env.NODE_ENV);
您可以复制粘贴的完整解决方案如下。process.env 的文档。
正如u/matthew 的回答所指出的,在 erb 文件中使用 Rails.env 存在风险。同样,如果NODE_ENV
没有在您的生产服务器上正确配置,您可能会遇到意外或危险的行为。我建议实现一个小模块来检查这两个变量,如果它们不匹配则抛出错误。
完整的解决方案
- 实现一个检查两种环境的小模块
- 在需要的地方导入这个模块
javascript/environment/index.js
/* global process */
const railsEnv = process.env.RAILS_ENV;
const nodeEnv = process.env.NODE_ENV;
if (!railsEnv || railsEnv !== nodeEnv) {
const errorMsg = `RAILS_ENV (${railsEnv}) does not match NODE_ENV (${nodeEnv})`;
throw new Error(errorMsg);
}
export default railsEnv;
现在可以在任何你喜欢的地方使用,比如在 React 组件中。
javascript/components/MyComponent
import env from '../../environment';
class PaintTheKeyboard extends React.Component {
constructor(props) {
super(props);
console.log(env);
}
...
render() { ... }
}